2013-04-06 107 views
-3

公共类TestDoubleEqualString {的java字符串比较

/** 
* @param args 
*/ 
public static void main(String[] args) { 


    String s1=new String("abc"); 
    String s2=new String("abc"); 


    System.out.println(s1.hashCode()); 
    System.out.println(s2.hashCode()); 



    System.out.println(s1==s2); 

    System.out.println(s1.equals(s2)); 


} 

}

//嗨,虽然我的s1.hashcode()和s2.hashCode()正在返回相同的值,那么为什么S1 == S2是假的.....

在此先感谢

+4

今天发生了一些奇怪的事情。每个人都在重复这个问题。 – Maroun 2013-04-06 16:15:19

+0

很多人也在标记问题时跳过枪重复。例如,尽管我的s1.hashcode()和s2.hashCode()返回相同的值,但是为什么,这个比起简单的'=='-vs-'equals()':有更深的误解。 .. * – NPE 2013-04-06 16:18:22

回答

1

s1 == s2是假的,因为==是比较字符串的引用,而不同,即使ŧ他两个字符串的内容是相同的。要检查字符串内容,请使用s1.equals(s2)

虽然我s1.hashcode()s2.hashCode()正在返回相同的值,那么为什么s1==s2是假

采用==不谈,这种逻辑是完全错误的。当两个字符串具有相同的散列码时,不可能从中推断它们是否由相同的字符序列组成(或者实际上是相同的对象)。

+0

+1为好解释 – Maroun 2013-04-06 16:21:29

1

NPE已经回答了这一点,但我只想澄清 - 字符串是对象 - ==是说“这是同一个对象”,而字符串对象的文本比较对象内部的.equals方法