public class TestDoubleEqualString {
/**
* @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为false .....
提前致谢
答案 0 :(得分:1)
s1 == s2
为false,因为==
正在比较字符串引用,即使两个字符串的内容相同,字符串引用也不同。要检查字符串内容,请使用s1.equals(s2)
。
虽然我的
s1.hashcode()
和s2.hashCode()
返回相同的值,但为什么s1==s2
为false
除了使用==
之外,这种逻辑完全有缺陷。当两个字符串具有相同的哈希码时,不可能从中得出结论它们是否由相同的字符序列组成(或者实际上是相同的对象)。
答案 1 :(得分:1)
NPE已经回答了这个问题,但只是为了澄清 - 字符串是对象 - ==说'这是同一个对象',而字符串对象的.equals方法正在比较对象内的文字。