Java返回String的方法能否返回new String构造的实例?
问题相关代码
对应LeetCode题目Shuffle String(重新排列字符串)的一段Java实现:
class Solution { public String restoreString(String s, int[] indices) { char[] charArray = new char[indices.length]; for(int i=0; i<indices.length; i++){ charArray[indices[i]] = s.charAt(i); } return new String(charArray); } }
疑问点
针对代码最后一行return new String(charArray);存在两点认知不确定:
- 最初认为该行代码是返回String类的构造器本身,不确定这个判断是否正确
- 想确认当方法声明的返回值类型为String时,是否可以直接返回这类通过构造方法创建的结果
解答
首先明确:返回构造器本身这个认知是完全错误的。
Java中new关键字的作用就是调用对应类的构造方法,最终生成并返回该类的实例对象。new String(charArray)这部分代码的执行逻辑是:调用String类提供的、参数为char数组的构造方法,将已经排好顺序的char数组内容封装为一个全新的String类型对象,return关键字返回的就是这个新生成的字符串实例,完全匹配方法声明的String返回值类型,是Java语法中完全合法、非常通用的写法。
补充两个核心概念说明:
- 构造方法本身是类实例化过程中的执行逻辑,不能作为返回值直接传递。
new操作会隐式执行构造方法内的初始化逻辑,最终输出的是初始化完成的实例对象,而非构造方法本身。 - 直接return new出来的对象,和先把new出来的对象赋值给变量再return,运行效果完全一致,前者只是更简洁的写法,两种写法示例:
// 直接返回构造生成的对象(题中写法) return new String(charArray); // 先赋值给变量再返回,和上面写法效果无差异 String result = new String(charArray); return result;
顺带梳理整段代码的执行逻辑方便对照理解:
- 创建和输入字符串长度相等的空char数组,作为重排后的字符容器
- 遍历原字符串的每一位字符,按照indices数组指定的下标位置,把对应字符放到空char数组的正确位置,完成字符顺序还原
- 把存着正确顺序字符的char数组转成String对象返回,就是题目要求的结果。
内容的提问来源于stack exchange,提问作者kartik04
相关产品推荐
相关产品推荐

