"==":
①基本類型比較的是值;
②引用類型比較的是地址;
③不同類型不能用它比較,無法通過編譯。
equals(Object obj):
①用於應用類型的比較;
②String重寫Object的equals方法,先用“==”判斷地址,地址相同則直接返回true;然后再比較類型,類型不同則直接返回false;最后才比較內容。代碼如下:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() == aString.coder()) { return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value); } } return false; }
由於equals是Objec的方法,意味着任意引用類型對象都可以調用,而且,入參是Object類型,所以,不同類型是可以用equals()方法的,不會像“==”一樣編譯異常,這也正是我經常遇到的一個小坑,例如:char chr = ‘a’,String str = “a”,我經常會寫成str.equals(chr),而且還傻傻的等着返回true,上面說到過,兩個不同類型的變量比較,equals()會直接返回false。str.equals(chr+"")倒是可以解決。
equalsIgnoreCase(String str):
雖然也是用來比較的,但是不同於equals,它是String自己的方法而不是重寫Object的方法,只有String對象能調用,而且入參只能是String。