操作符 == 和!= 對于基本類型比較是其内容,但對于對象則是比較其引用。
方法 equals() 不适用于基本類型的比較,适合對象之間的比較。但其預設行為也是比較對象的引用。
Java 類庫中大多數都實作了equals() 方法,來比較對象之間的内容,而不是比較對象的引用。
class Test {
int value;
}
public class Operator {
public static void main(String[] args) {
int i1 = 10;
int i2 = 10;
System.out.println("基本資料類型比較, i1 == i2 ?: " + (i1 == i2));
Integer n1 = new Integer(10);
Integer n2 = new Integer(10);
System.out.println("基本資料類型Integer對象比較, n1 == n2 ?: " + (n1 == n2));
Test t1 = new Test();
Test t2 = new Test();
t1.value = t2.value = 10;
System.out.println("自定義類對象比較, t1 == t2 ?: " + (t1 == t2));
String s1 = new String("aaa");
String s2 = new String("aaa");
System.out.println("已實作 equals()方法對象的比較, s1 == s2 ?: " + s1.equals(s2));
}
}
比較對象,預期結果都是 False, 實作了equals() 方法後,比較結果為True
==================================================
基本資料類型比較, i1 == i2 ?: true
基本資料類型Integer對象比較, n1 == n2 ?: false
自定義類對象比較, t1 == t2 ?: false
已實作 equals()方法對象的比較, s1 == s2 ?: true
==================================================
這種結果其實也是根原于Java 對于對象的操作是使用對象的引用(還是别名問題)。