equals與==的區別(詳解)
前言
本文主要中原始碼的解釋上去看兩者的區別
==
對於基本資料型別來說,==比較的是兩者的值;對於引用型別來說,==比較的兩者的記憶體地址。
equals
對於基本資料型別來說,沒有equals方法;對於引用型別來說,equals比較的可能是記憶體地址,也可能是記憶體地址和值都比較,從equals的實現上來說,其實用的比較也是==,所以equals的具體比較得看重寫後的方法。具體如下:
對於Object型別來說,equals方法比較的是兩者的記憶體地址。但很多型別都重寫了equals方法,例如常用的String型別比較的就是記憶體地址和值,具體解析看如下原始碼。
-
Object
public boolean equals(Object obj) { return (this == obj); }
-
String
public boolean equals(Object anObject) { // 第一個if,判斷兩者是否是同一個記憶體地址 if (this == anObject) { return true; } // 第二個if,判斷兩者的值是否相同(將每個字元逐一比較) if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
equals方法重寫注意點
- 自反性:對任意引用obj,obj.equals(obj)的返回值一定為true.
- 對稱性:對於任何引用o1、o2,當且僅當o1.equals(o2)返回值為true時,o2.equals(o1)的返回值一定為true;
- 傳遞性:如果o1.equals(o2)為true, o2.equals(o3)為true,則o1.equals(o3)也一定為true
- 一致性:如果參與比較的物件沒任何改變,則物件比較的結果也不應該有任何改變
- 非空性:任何非空的引用obj,obj.equals(null)的返回值一定為false
參考
[1] https://zhidao.baidu.com/question/61622858.html
相關文章
- Java中(==)與equals的區別Java
- Java面試題 equals()與"=="的區別?Java面試題
- Java基礎-- ==號與equals()方法的區別Java
- 詳解not in與not exists的區別與用法
- javaSE中的==和equals的聯絡與區別Java
- 詳解iframe與frame的區別
- 【Java】equals 和 == 的區別Java
- ==和equals方法的區別
- synchronized與Lock的區別與使用詳解synchronized
- Java之String的equals與contentEquals區別Java
- TCP與UDP區別詳解TCPUDP
- cookie和session的詳解與區別CookieSession
- java字串“==”與“equals”的差異及與c#的區別Java字串C#
- java 中equals和==的區別Java
- equals()和hashCode()的區別
- Java中equals和==的區別Java
- equals和equalsIgnoreCase的區別
- Kafka與ActiveMQ的區別與聯絡詳解KafkaMQ
- 詳解Kafka與ActiveMQ的區別與聯絡!KafkaMQ
- Java中equals與==的本質區別是什麼?Java
- Java運算子>>與>>>區別詳解Java
- rem與em的使用和區別詳解REM
- PHP isset()與empty()的使用區別詳解PHP
- xargs 命令詳解,xargs 與管道的區別
- cookie與session的區別(圖文詳解)CookieSession
- xargs命令詳解,xargs與管道的區別
- Java中Vector與ArrayList的區別詳解Java
- Java中 equals() 方法和 == 的區別Java
- 深入理解equals和==的區別
- 【ASP.net】Equals 和 == 的區別ASP.NET
- 在java中“equals”和“==”的區別Java
- "a".equals(b)和b.equals("a")有什麼區別
- PHP中isset()與empty()的使用區別詳解PHP
- Truncate table 詳解及與delete,drop 的區別delete
- Truncate table詳解及與delete,drop的區別delete
- 你真的知道 == 和 equals 的區別嗎?
- 你真的懂 == 和 equals 的區別嗎?
- Python之列表與元組的區別詳解Python