String str1 = "abc:5";
String str2 = "abc:" + str1.length();
String str3 = "abc:" + 5;
System.out.println(str1==str2);
System.out.println(str1==str3);
輸出是: 假 真正任何人都可以請解釋爲什麼輸出以下是這樣的?該計劃的
但我不明白爲什麼?
String str1 = "abc:5";
String str2 = "abc:" + str1.length();
String str3 = "abc:" + 5;
System.out.println(str1==str2);
System.out.println(str1==str3);
輸出是: 假 真正任何人都可以請解釋爲什麼輸出以下是這樣的?該計劃的
但我不明白爲什麼?
==
操作會比較僅供參考
.equals()
將比較值。
你的情況
str1==str2
//比較兩個引用,這是不同的。
它當時,str1.equals(str2)
,它會比較的值,這將return true
的「==」操作符
在Java中,當「==」操作符是用來比較2個對象,它檢查對象是否指向內存中的相同位置。換句話說,它檢查以查看是否2對象名是基本上相同的內存引用位置資訊「==」
操作員在存儲器中的對象位置(一個或多個)進行比較
的‘等於’方法 Java的字符串類實際上覆蓋了Object
類中的默認equals()
實現 - 並且它會覆蓋該方法,以便它僅檢查字符串的值,而不檢查它們在內存中的位置。
這裏str1 =「abc:5」;位於字符串的常量池中,str2與新運算符的2個不同對象連接。所以str1和str2都指的是不同的對象。這就是它顯示錯誤的原因。
你能解釋一下str3的原因嗎? – user2014 2014-12-13 16:15:23
==
運算符僅用於java中的引用變量。例如,如果您要比較字符a1
和a2
,則可以使用==
運算符,因爲char
類型在Java中的大多數IDE中突出顯示。要檢查兩個字符串是否相等,可以使用.equals()
或.equalsIgnoreCase()
來比較字符串。這是因爲字符串是對象而不是原語,並且需要在類中使用它們自己的方法來測試字符串是否相同。
對於第一個System.out.println();
聲明,您將使用System.out.println(str1.equals(str2));
或System.out.println(str1.equalsIgnoreCase(str2));
。
對於第二個System.out.println();
聲明,您可以使用System.out.println(str1.equals(str3));
或System.out.println(str1.equalsIgnoreCase(str3));
。
所以在這裏,str1和str3是指相同的內存位置? – user2014 2014-12-13 16:17:14
@ user2014'「」+ 5'這裏'5'只被視爲String,而'str.length()'將被視爲'int',但所有三者的哈希碼都是相同的。但不太確定爲什麼結果不同,已經爲您的問題提出了上訴。 – 2014-12-13 16:45:09