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

Java中subSequence判断返回false而非true的原因咨询

Why does subSequence() comparison with == return false even when content matches?

嘿,这事儿我太熟了!你踩的是Java字符串比较里一个经典的小坑——把对象地址比较和内容比较搞混了。

咱们一步步拆解:

  • 你用的==运算符,在Java里是用来比较两个对象的内存地址的,简单说就是看这两个东西是不是同一个对象。result.subSequence(2, 10)会返回一个新的CharSequence实例(本质是String的子类对象),而你定义的result1是另一个独立的String对象,哪怕它们内容完全一样,内存地址也不一样,所以==自然返回false。
  • 而要比较字符串的内容是否相等,你得用equals()方法,这个方法会逐个字符检查两个字符串的内容是否完全匹配,不管它们是不是同一个对象。

看你的代码,把判断条件改成下面这样就正常了:

package testifthen;
public class TestIfThen {
    public static void main(String[] args) {
        String result = "01900287491234567489";
        String result1 = "90028749";
        // 用equals()比较内容,而不是==比较地址
        if (result.subSequence(2, 10).equals(result1)) {
            System.out.println("excel");
        }else {
            System.out.println("not found");
        }
    }
}

补充个小知识点:如果是直接定义的字符串常量(比如String a = "test"; String b = "test";),用==会返回true,因为它们会被存在字符串常量池里,指向同一个对象。但像subSequence()、new String()这种方式生成的字符串是在堆上的新对象,所以必须用equals()来比内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:10