== 比較引用地址(基本類型比值);equals() 默認比引用,但 String/包裝類重寫為比內容。
int a=3, b=4, c=3; a==b // false a==c // true a.equals(c) // 編譯錯誤:基本類型無方法
| 類型 | == | equals() | 備註 |
|---|---|---|---|
| Object(未重寫) | 比地址 | 比地址 | 默認行為 |
| String | 比地址 | 比內容 | 重寫了 equals |
| Integer/Double 等包裝類 | 比地址 | 比內容 | 重寫了 equals |
| StringBuffer/自定義類(未重寫) | 比地址 | 比地址 | 未重寫 equals |
String s1 = new String("abc");
String s2 = new String("abc");
s1 == s2; // false(兩個堆對象)
s1.equals(s2); // true(內容相同)
String s3 = "abc";
String s4 = "abc";
s3 == s4; // true(常量池複用同一對象)
Integer n1 = 127; // 自動裝箱 → Integer.valueOf(127) Integer n2 = 127; n1 == n2; // true(-128~127 緩存池複用) Integer n3 = 128; Integer n4 = 128; n3 == n4; // false(超出緩存範圍,新建對象) n3.equals(n4); // true
「基本類型看雙等,引用類型分兩類:
String 包裝重寫了,equals 比內容真;
其餘未改看地址,雙等 equals 一樣真。」