首先,來看看它們的區(qū)別:
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),潮州企業(yè)網(wǎng)站建設(shè),潮州品牌網(wǎng)站建設(shè),網(wǎng)站定制,潮州網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,潮州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。(推薦學習:java入門程序)
equals()方法用來比較的是兩個對象的內(nèi)容是否相等,由于所有的類都是繼承自java.lang.Object類的,所以適用于所有對象,如果沒有對該方法進行覆蓋的話,調(diào)用的仍然是Object類中的方法,而Object中的equals方法返回的卻是==的判斷;
"==" 比較的是變量(棧)內(nèi)存中存放的對象的(堆)內(nèi)存地址,用來判斷兩個對象的地址是否相同,即是否是指相同一個對象。
equals()作用
equals() 的作用是用來判斷兩個對象是否相等。
equals() 定義在JDK的Object.java中。通過判斷兩個對象的地址是否相等(即,是否是同一個對象)來區(qū)分它們是否相等。源碼如下:
public boolean equals(Object obj) { return (this == obj); }
既然Object.java中定義了equals()方法,這就意味著所有的Java類都實現(xiàn)了equals()方法,所有的類都可以通過equals()去比較兩個對象是否相等。
但是,我們已經(jīng)說過,使用默認的“equals()”方法,等價于“==”方法。因此,我們通常會重寫equals()方法:若兩個對象的內(nèi)容相等,則equals()方法返回true;否則,返回fasle。
下面根據(jù)"類是否覆蓋equals()方法",將它分為2類。
若某個類沒有覆蓋equals()方法,當它通過equals()比較兩個對象時,實際上是比較兩個對象是不是同一個對象。這時,等價于通過“==”去比較這兩個對象。
我們可以覆蓋類的equals()方法,來讓equals()通過其它方式比較兩個對象是否相等。通常的做法是:若兩個對象的內(nèi)容相等,則equals()方法返回true;否則,返回fasle。
下面,舉例對上面的兩種情況進行說明:
1、沒有覆蓋equals()方法的情況
public class EqualsTest { public static void main(String[] args) { // 新建2個相同內(nèi)容的Person對象, // 再用equals比較它們是否相等 User user1 = new User("James", 100); User user2 = new User("James", 100); System.out.printf("比較結(jié)果:" + user1.equals(user2)); } /** * @desc User類。 */ static class User { int age; String name; public User(String name, int age) { this.name = name; this.age = age; } public String toString() { return name + " - " + age; } } }
運行結(jié)果:
false
結(jié)果分析:
我們通過 user1.equals(user2) 來“比較user1和user2是否相等時”,實際上,調(diào)用的Object.java的equals()方法,即調(diào)用的 (user1==user2) 。
它是比較“p1和p2是否是同一個對象”。而由 user1 和 user2 的定義可知,它們雖然內(nèi)容相同;但它們是兩個不同的對象,因此,返回結(jié)果是false。
(視頻教程推薦:java視頻教程)
2、覆蓋equals()方法的情況
修改上面的EqualsTest,覆蓋equals()方法:
public class EqualsTest { public static void main(String[] args) { // 新建2個相同內(nèi)容的Person對象, // 再用equals比較它們是否相等 User user1 = new User("James", 100); User user2 = new User("James", 100); System.out.printf("比較結(jié)果:" + user1.equals(user2)); } /** * @desc User類。 */ static class User { int age; String name; public User(String name, int age) { this.name = name; this.age = age; } public String toString() { return name + " - " + age; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; User other = (User) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } }
運行結(jié)果:
true
結(jié)果分析:我們在EqualsTest.java 中重寫了User的equals()函數(shù):當兩個User對象的 name 和 age 都相等,則返回true。因此,運行結(jié)果返回true。
== 的作用
“==”:它的作用是判斷兩個對象的地址是不是相等。即判斷引用對象是不是指向的堆中的同一個對象,我們知道,凡是new出來的對象都在堆中。而對象的引用都存放在棧中,具體來講就是放在棧幀中,我們來看下面一段代碼:
public static void main(String[] args) { User user1 = new User("James", 100); User user2 = new User("James", 100); System.out.println("user1.equals(user2):" + user1.equals(user2)); System.out.println("user1==user2:" + (user1==user2)); }
輸出結(jié)果:
user1.equals(user2):true user1==user2:false
指向的是堆中兩塊不同的區(qū)域,所以用 "==" 比較時返回的是false。
網(wǎng)頁名稱:equals()函數(shù)與“==”的作用分別是什么
瀏覽路徑:http://muchs.cn/article48/cjjiep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、定制網(wǎng)站、Google、虛擬主機、商城網(wǎng)站、面包屑導航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)