You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

顺带梳理整段代码的执行逻辑方便对照理解:

  1. 创建和输入字符串长度相等的空char数组,作为重排后的字符容器
  2. 遍历原字符串的每一位字符,按照indices数组指定的下标位置,把对应字符放到空char数组的正确位置,完成字符顺序还原
  3. 把存着正确顺序字符的char数组转成String对象返回,就是题目要求的结果。

内容的提问来源于stack exchange,提问作者kartik04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:15:39