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
相关产品推荐
相关产品推荐

