日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java中关于==和equal的区别 以及equals()方法重写

發(fā)布時(shí)間:2025/7/14 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中关于==和equal的区别 以及equals()方法重写 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

例子i:

string1="aaa";

string2="aaa";

String string3=new String("aaa");

String string4=new String("aaa");

string1==string2 // true; .

string1.equals(string2);//true;

string3==string4;//false 因?yàn)橛胣ew創(chuàng)建了2個(gè)對(duì)象,所以是兩個(gè)不同的內(nèi)存地址

string3.equals(string4);//true 而String類的是不可改變的,所以會(huì)指向同一個(gè)內(nèi)存地址,所以返回為true

equals()是object的方法,所以只是適合對(duì)象,不適合于基本類型,equals()默認(rèn)是用"=="比較兩個(gè)對(duì)象的內(nèi)存地址,如果想要比較兩個(gè)對(duì)象的內(nèi)容,要重寫equals()方法才可...而==可以比較兩個(gè)基本類型,也可以是對(duì)象...

String的equals()方法重寫:

public boolean equals(Object object){

if( this==anObject)

{return true;}

if(anObject instancdOf String)

{String anotherString =(String)anObject;

int n= count;

if(n==anotherString.count)

{ char V1[]=value;

char V2[]=anotherString.value;

int i=offset;

int j=anotherString.offset;

while(n--!=0)

{ if (v1[i++]!=V2[j++]

return false;}

return true;}

}

return false;

}

總而言之:在類對(duì)象中 equals()方法比較的是對(duì)象的值,==比較的是對(duì)象.即為對(duì)象的引用(即為內(nèi)存地址)一些特殊情況下equals()是重寫了方法咯..

equal:是用來(lái)比較兩個(gè)對(duì)象內(nèi)部的內(nèi)容是否相等的,由于所有的類都是繼承

自java.lang.Object類的,所以如果沒(méi)有對(duì)該方法進(jìn)行覆蓋的話,調(diào)用

的仍然是Object類中的方法,而Object中的equal方法返回的卻是==

的判斷,因此,如果在沒(méi)有進(jìn)行該方法的覆蓋后,調(diào)用該方法是沒(méi)有

任何意義的。

==:是用來(lái)判斷兩個(gè)對(duì)象的地址是否相同,即是否是指相同一個(gè)對(duì)象。比較的

是真正意義上的指針操作。

1、聲明格式

public boolean equals(Object obj)

其比較規(guī)則為:當(dāng)參數(shù)obj引用的對(duì)象與當(dāng)前對(duì)象為同一個(gè)對(duì)象時(shí),就返回true,否則返回false.

比如以下兩個(gè)對(duì)象animal1和animal2,引用不同的對(duì)象,因此用==或equals()方法比較的結(jié)果為false;而animal1和animal3變量引用同一個(gè)DOg對(duì)象,因此用= =或者equals()方法比較的結(jié)果為true.

Animal animal1=new Dog();

Animal animal2=new Cat();

Animal animal3=animal1;

則animal1==animal2 (FALSE)

animal1.equals(animal2) (false)

animal1==animal3 (true)

animal1.equals(animal3) (true)

而JDK類中有一些類覆蓋了oject類的equals()方法,比較規(guī)則為:如果兩個(gè)對(duì)象的類型一致,并且內(nèi)容一致,則返回true,這些類有:

java.io.file,java.util.Date,java.lang.string,包裝類(Integer,Double等)

比如

Integer int1=new Integer(1);

Integer int2=new Integer(1);

String str1=new String("hello");

String str2=new String("hello");

int1==int2 輸出:false,因?yàn)椴煌瑢?duì)象

int1.equals(int2) 輸出:TRUE

str1==str2 (false)

str1.equals(str2) (true)

當(dāng)然,可以自定義覆蓋object類的equals()方法,重新定義比較規(guī)則。比如,下面Person類的equals()比較規(guī)則為:只要兩個(gè)對(duì)象都是Person類,并且他們的屬性name都相同,則比較結(jié)果為true,否則返回false

public class Person{

private String name;

public Person(String name)

{

this.name=name;

}

public boolean equals(Object o)

{

if (this==0) return true;

if (!o instanceof Person) return false;

final Person other=(Person)o;

if (this.name().equals(other.name()))

return true;

else

return false;

}

}

注意,在重寫equals方法時(shí),要注意滿足離散數(shù)學(xué)上的特性

1、自反性 :對(duì)任意引用值X,x.equals(x)的返回值一定為true.

2 對(duì)稱性: 對(duì)于任何引用值x,y,當(dāng)且僅當(dāng)y.equals(x)返回值為true時(shí),x.equals(y)的返回值一定為true;

3 傳遞性:如果x.equals(y)=true, y.equals(z)=true,則x.equals(z)=true

4 一致性:如果參與比較的對(duì)象沒(méi)任何改變,則對(duì)象比較的結(jié)果也不應(yīng)該有任何改變

5 非空性:任何非空的引用值X,x.equals(null)的返回值一定為false

轉(zhuǎn)載于:https://www.cnblogs.com/air5/archive/2011/11/22/2258972.html

總結(jié)

以上是生活随笔為你收集整理的Java中关于==和equal的区别 以及equals()方法重写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。