java中子字符串和字符串的区别

时间:2014-10-05 08:38:46

标签: java string substring equals

class test {

public static void main(String[] args) {
    String a = "Hiabc";
    String b = "abc";
    String c = "abc";
    System.out.println(a.substring(2,5)==b);
    System.out.println(b==c);
}
}

output:
false
true

据我所知,Java的==寻找两个比较对象的地址。但是,我不明白为什么b == c是真的,因为它们必须有不同的地址。另外,如果b == c,那么为什么a.substring(2,5),即“abc”== b false?

2 个答案:

答案 0 :(得分:1)

  

据我了解,Java = =查找两个比较对象的地址。

几乎正确。 Java使用引用而不是地址,例如引用是强类型的:请参阅https://softwareengineering.stackexchange.com/questions/141834/how-is-a-java-reference-different-from-a-c-pointer

  

为什么b == c为真

变量bc使用相同的字符串引用进行初始化,因为它们引用相同的string literal "abc"

  

为什么子串表达式不引用字符串文字“abc”?

因为substring()的javadoc说

  

返回一个新字符串,该字符串是此字符串的子字符串。

因此该方法不能确保返回对常量池中字符串的引用。如果你想要这个你必须这样做

a.substring(2,5).intern()

而不是

a.substring(2,5).intern()==b

将是true

答案 1 :(得分:0)

永远不要在Java中将字符串与==进行比较。 改为使用.equal或.equalIgnoreCase方法。

a.substring(2,5)和b之间的区别是因为substring创建了另一个String对象,它位于与b不同的位置。这不是人物......