首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java equals() 與 == 運算符的本質區別與避坑指南

     編輯:Java 綜合教學

Java equals() 與 == 運算符的本質區別與避坑指南

一句話核心結論

== 比較引用地址(基本類型比值);equals() 默認比引用,但 String/包裝類重寫為比內容。

1. 基本類型:只能用 ==

int a=3, b=4, c=3;
a==b  // false
a==c  // true
a.equals(c)  // 編譯錯誤:基本類型無方法

2. 引用類型:雙重語義

類型==equals()備註
Object(未重寫)比地址比地址默認行為
String比地址比內容重寫了 equals
Integer/Double 等包裝類比地址比內容重寫了 equals
StringBuffer/自定義類(未重寫)比地址比地址未重寫 equals

3. 經典陷阱案例

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(常量池複用同一對象)

4. 特殊情況:Integer 緩存

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

5. 避坑檢查清單

  • ✅ 字符串/包裝類比內容 → equals()
  • ✅ 基本類型/判斷同一對象引用 → ==
  • ⚠️ 自定義類需語義相等 → 必須重寫 equals() + hashCode()
  • ⚠️ StringBuffer/ArrayList 等集合類未重寫 equals → equals() 仍比引用

6. 記憶口訣

「基本類型看雙等,引用類型分兩類:
String 包裝重寫了,equals 比內容真;
其餘未改看地址,雙等 equals 一樣真。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved