論述政府門(mén)戶網(wǎng)站建設(shè)的基本意義百度優(yōu)化大師
1.== 為運(yùn)算符,equal 為String數(shù)據(jù)類型的比較方法;相同內(nèi)容的對(duì)象地址不一定相同,但相相同地址的對(duì)象內(nèi)容一定相同;== 比較的是值是否相等,equal比較的是是否是同一個(gè)對(duì)象。
2.基本概念不同
1)對(duì)于==,比較的是值是否相等
如果作用于基本數(shù)據(jù)類型的變量,則直接比較其存儲(chǔ)的 值是否相等, 如果作用于引用類型的變量,則比較的是所指向的對(duì)象的地址是否相等。
其實(shí)==比較的不管是基本數(shù)據(jù)類型,還是引用數(shù)據(jù)類型的變量,比較的都是值,只是引用類型變量存的值是對(duì)象的地址
2)對(duì)于equals方法,比較的是是否是同一個(gè)對(duì)象
首先,equals()方法不能作用于基本數(shù)據(jù)類型的變量,
另外,equals()方法存在于Object類中,而Object類是所有類的直接或間接父類,所以說(shuō)所有類中的equals()方法都繼承自O(shè)bject類,
在沒(méi)有重寫(xiě)equals()方法的類中,調(diào)用equals()方法其實(shí)和使用==的效果一樣,也是比較的是引用類型的變量所指向的對(duì)象的地址
不過(guò),Java提供的類中,有些類都重寫(xiě)了equals()方法,重寫(xiě)后的equals()方法一般都是比較兩個(gè)對(duì)象的值,比如String類。
兩者的區(qū)別:
== 為運(yùn)算符
equal 為String數(shù)據(jù)類型的比較方法.equal()
兩者的比較范圍:
一方面是基礎(chǔ)數(shù)據(jù)類型(例如 int a = 1),== 與 equal 都是作用于比較對(duì)象內(nèi)容(堆)是否相同。
另一方面則是引用對(duì)象類型(例如 int a = new int(1)), == 與 equal 都是作用于比較對(duì)象內(nèi)存地址(棧)是否相同。
需要注意的是:
1.equal在源碼中的實(shí)現(xiàn)為一下存在形式,可以被重寫(xiě)
public boolean equals(Object obj) { return (this == obj);}
2.相同內(nèi)容的對(duì)象地址不一定相同,但相相同地址的對(duì)象內(nèi)容一定相同。