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

Java中substring(0)与原字符串用==比较返回true的原因是什么

Java substring(0)和原字符串==比较返回true的原因

你给出的测试代码如下:

String str = new String("javaTrain") ;  /*new object1  in heap memory */
System.out.println(str ==  str.substring(0) );

核心原因:substring方法的内置优化

我们直接参考JDK中substring(int beginIndex)方法的实现逻辑就能得到答案:

public String substring(int beginIndex) {
    // 省略入参边界校验逻辑
    int subLen = value.length - beginIndex;
    // 省略子串长度合法性校验逻辑

    // 关键分支:起始索引为0时直接返回当前对象本身,不创建新对象
    return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}
  • 你调用str.substring(0)时,正好命中了beginIndex == 0的分支,方法直接返回原字符串对象,没有生成新的堆内存对象。
  • Java中==运算符对引用类型比较的是对象的内存地址,同一个对象的地址完全相等,所以最终输出结果为true。
  • 只有当beginIndex不为0时,方法才会真正创建新的String对象,此时用==和原字符串比较才会返回false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:30:04