比較下面的代碼的輸出是false
字符串和整數與equals
String str = "3456";
String str1 = "3456";
System.out.println(Integer.valueOf(str).equals(str1));
我不明白。我認爲它會返回true
。當我正在爲SCJP做準備時,瞭解其背後的原因可能會有所幫助。有人可以幫忙嗎?
比較下面的代碼的輸出是false
字符串和整數與equals
String str = "3456";
String str1 = "3456";
System.out.println(Integer.valueOf(str).equals(str1));
我不明白。我認爲它會返回true
。當我正在爲SCJP做準備時,瞭解其背後的原因可能會有所幫助。有人可以幫忙嗎?
一個Integer
將永遠不會equal
到String
。
這兩個類都有非常嚴格的equals()
定義,只有接受它們各自類型的對象。
結果爲true當且僅當該參數不是
null
和是Integer
對象包含相同int值作爲該對象。
結果爲true當且僅當該參數不是
null
和是String
對象表示相同的字符序列作爲該對象。
這實際上是實現equals()
很常見的方式:只有同一個類的對象(偶爾子類)可以是相等的。其他的實現是可能的,但是是例外。
一個常見的例外是集合such as List
:下面的慣例相比,當任何其他實現,如果它在相同的順序相同的內容將返回true
每List
實施。
了equals()方法的國家(除其他事項外),其是對象進行比較的需要是同一類的一般合同。這就是爲什麼你永遠無法比較蘋果和橘子。
有關equals()方法的完整合同,請參閱javadocs。
通常,實施equals()
時,第一要做的事情之一是檢查對象是否是同一個類型的。
public boolean equals(Object obj) {
if (!(obj instanceof SomeType)) return false;
...
}
這也是在Integer
和String
類,解答了爲什麼你收到false
結果的問題上。
一個Integer對象不能與String對象等於
使用:
boolean a = str.equals(str1);
OR
boolean a = (Integer.parseInt(str) == Integer.parseInt(str1));
哪種更好? – barq
爲什麼要相等?一個是Integer對象,另一個是String對象。這是一個很大的區別......一個代表一個數字值,另一個代表一個字符序列。 – jlordo