一. 介紹: Java中的 "==" 是一個運算符,是用於比較兩個對象地址值或基本數據類型之間的值是否相等。它的來源可以追溯到C語言,以及受C語言影響的許多其他編程語言。 Java中的equals() 是一個方法,可重寫該方法用於比較兩個對象屬性內容是否相等的方法。該方法繼承自Object類,在Ja ...
一. 介紹:
Java中的 "==" 是一個運算符,是用於比較兩個對象地址值或基本數據類型之間的值是否相等。它的來源可以追溯到C語言,以及受C語言影響的許多其他編程語言。
Java中的equals() 是一個方法,可重寫該方法用於比較兩個對象屬性內容是否相等的方法。該方法繼承自Object類,在Java的所有類中都可以使用。
二. 區別:
1. 語法不同:
== 是運算符 C語言編寫的運算符;
equals() 是Object類的方法;
2. 作用不同:
基本類型: == 是用來做值比較的,而equals()不能直接用於比較基本數據類型,需要轉換為其對應的包裝類型。
引用類型: == 和 equals() 都可以比較棧記憶體中引用的地址值是否相等 。相等為 true 否則為 false,但是通常對某個類重寫equals()方法,以自定義兩個對象相等的條件(Object.equals() 是比較地址)。
三. 代碼展示
public class User { private String name; // 略: 構造方法、getter、setter、toString()等 // 重寫equals() 方法 @Override public boolean equals(Object o) { if (this == o) return true; // 若地址值一致則直接返回 true if (o == null || getClass() != o.getClass()) return false; // 若對象為null 或者 對象非同一個類,則直接返回false; User user = (User) o; // 獲取該對象,強轉為user類 return Objects.equals(name, user.name); // 使用equals 比較對象屬性是否一致,返回結果true 或 false } // 重寫hashcode方法 @Override public int hashCode() { return Objects.hash(name); } } public static void main(String[] args) { User u1 = new User("小米"); User u2 = new User("小米"); // 比較地址值 System.out.println(u1 == u2); // 比較對象內容 System.out.println(u1.equals(u2)); } 輸出結果: false true
從代碼上可以看出來在new 新對象後,地址值是發生改變的,通過 == 運算符 或者 原生Object.equals() 方法,是不能判斷對象的屬性的,所以需要在該類重寫equals()方法,使自定義類比較其值是否相等。
完