的java字符串比较
问题描述:
公共类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是假的.....
在此先感谢
答
s1 == s2
是假的,因为==
是比较字符串的引用,而不同,即使ŧ他两个字符串的内容是相同的。要检查字符串内容,请使用s1.equals(s2)
。
虽然我
s1.hashcode()
和s2.hashCode()
正在返回相同的值,那么为什么s1==s2
是假
采用==
不谈,这种逻辑是完全错误的。当两个字符串具有相同的散列码时,不可能从中推断它们是否由相同的字符序列组成(或者实际上是相同的对象)。
+0
+1为好解释 – Maroun 2013-04-06 16:21:29
答
NPE已经回答了这一点,但我只想澄清 - 字符串是对象 - ==是说“这是同一个对象”,而字符串对象的文本比较对象内部的.equals方法。
今天发生了一些奇怪的事情。每个人都在重复这个问题。 – Maroun 2013-04-06 16:15:19
很多人也在标记问题时跳过枪重复。例如,尽管我的s1.hashcode()和s2.hashCode()返回相同的值,但是为什么,这个比起简单的'=='-vs-'equals()':有更深的误解。 .. * – NPE 2013-04-06 16:18:22