導航:首頁 > 編程語言 > javaequals對象

javaequals對象

發布時間:2022-07-21 22:50:50

java里 equals和== 區別

==是一個比較運算符,基本數據類型比較的是值,引用數據類型比較的是地址值。

(比較地址值即是指是否為同一個對象的引用)

equals()是一個方法,只能比較引用數據類型。重寫前比較的是地址值,重寫後比一般是比較對象的屬性。

(1)javaequals對象擴展閱讀:

java中的數據類型,可分為兩類:

1.基本數據類型,也稱原始數據類型。

byte,short,char,int,long,float,double,boolean,他們之間的比較,應用雙等號(==),比較的是他們的值。

2.復合數據類型。

當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址,所以,除非是同一個new出來的對象,他們的比較後的結果為true,否則比較後結果為false。

JAVA當中所有的類都是繼承於Object這個基類的,在Object中的基類中定義了一個equals的方法,這個方法的初始行為是比較對象的內存地址。

但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現,而不再是比較類在堆內存中的存放地址了。

對於復合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基於他們在內存中的存放位置的地址值的,因為Object的equals方法也是用雙等號(==)進行比較的,所以比較後的結果跟雙等號(==)的結果相同。

㈡ 深入java的equals方法,怎麼比較兩個對象的

當定義一個類時,首先這個類會繼承Object類(所有類的父類)的equals方法,然後開發者可以根據具體業務場景去考慮要不要重寫equals方法。

publicbooleanequals(Objectobj){
return(this==obj);
}

上面代碼即是Object的equals方法的實現, == 判斷,即兩個對象的地址完全一樣的時候才相等。

當開發者定義類時不重寫equals方法,則實際調用中使用Object這個父類的equals方法實現。

下面看看String的equals方法:

publicbooleanequals(ObjectanObject){
if(this==anObject){
returntrue;
}
if(anObjectinstanceofString){
StringanotherString=(String)anObject;
intn=value.length;
if(n==anotherString.value.length){
charv1[]=value;
charv2[]=anotherString.value;
inti=0;
while(n--!=0){
if(v1[i]!=v2[i])
returnfalse;
i++;
}
returntrue;
}
}
returnfalse;
}

這就是String重寫的equals方法,可以仔細看看,很有參考價值。

接下來寫段類定義的代碼:

publicclassPerson{
privateStringname;//姓名
privateintage;//年齡
privateStringspeciality;//特長

@Override
publicbooleanequals(Objectobj){
//兩個對象是同一個時,直接returntrue
if(this==obj){
returntrue;
}
if(objinstanceofPerson){
//比較對象也是Person對象時,判斷name和age是否都相同
Personp=(Person)obj;
returnname.equals(p.name)&&age==p.age;
}
returnfalse;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}

publicStringgetSpeciality(){
returnspeciality;
}

publicvoidsetSpeciality(Stringspeciality){
this.speciality=speciality;
}
}

測試代碼:

publicclassTest{

publicstaticvoidmain(String[]args)throwsIOException{
Personp1=newPerson("張三",20,"java");
Personp2=newPerson("張三",20,"python");

System.out.println(p1.equals(p2));
}
}

根據Person重寫的equals方法可以知道,運行結果為 true

如果Person沒有重寫equals方法,那麼會調用Object的equals方法,運行結果為 false

所以實際怎麼比較兩個對象這完全是看開發者也就是你自己的意思

㈢ java中的equals怎麼用

equals 方法是String類從它的超類Object中繼承的, 被用來檢測兩個對象是否相等,即兩個對象的內容是否相等,區分大小寫。

例子:

s1=newString("sony");//創建的是字元串對象
s1.equals("sony");//返回true
s1=="sony"//返回false

//如果
s1="sony";
s1=="sony"//返回true

//如果
s1="sony";
s2="sony";
s1.equals(s2);或者string.equals(s1,s2);//返回true

㈣ java中equals方法詳解有哪些

因為你的Value類沒有重寫equals 方法,這個方法是在Object類中定義的,是可以自己按照需要進行重寫的,如果沒有重寫,其默認的邏輯是比較兩個相互equals 的對象的內存地址是不是同一個地址,第一個輸出的時候v1,v2都是new出來的,所以v1和v2在堆中是不同的內存地址,所以equals結果為false
第二個輸出,其調用的是Integer類的equals,Integer類中有重寫原有equals方法的邏輯,其邏輯是比較兩個Integer對象中封裝的數字的值,如果相同就返回true,因此第二個輸出true
第三個輸出false原理同第一個,兩個對象之間使用==比較的就是內存地址,因為都是new出來的,堆內存地址不同,所以輸出false
簡單來講,如果來自同一個類的兩個對象,如果沒有重寫equals方法的邏輯,其==結果和equals結果是相同的,如果有重寫equals方法,則==和equals結果可能會不同

㈤ java中equals使用方法

java中equals使用方法:

  1. equals 方法是String類從它的超類Object中繼承的, 被用來檢測兩個對象是否相等,即兩個對象的內容是否相等,區分大小寫。

    對於字元串變數來說,使用「==」和「equals()」方法比較字元串時,其比較方法不同。「==」比較兩個變數本身的值,即兩個對象在內存中的首地址。「equals()」比較字元串中所包含的內容是否相同。例如:

  2. s1=newString("abc");
    s2=newString("abc");
    s1.equals(s2)是true

3.對於非字元串變數來說,"=="和"equals"方法的作用是相同的都是用來比較其對象在堆內存的首地址,即用來比較兩個引用變數是否指向同一個對象。

classA
{
Aobj1=newA();
Aobj2=newA();
}
obj1.equals(obj2)是false

㈥ java中對象引用的列印和equals方法

內存里a和b指向的不是同一個對象,不是同一塊內存。
代碼hh
a=new
hh();是表示在棧內存里分配一塊區域給a,同時在堆內存里創建一個hh類的對象,
然後讓a指向這個對象。
代碼hh
b=new
hh();是表示在棧內存里分配一塊區域給b,同時在堆內存里創建一個hh類的對象,
然後讓b指向這個對象。
看你的hh里沒有重寫toString(),直接列印a和b應該是調用Object裡面的toString(),列印出來的是類名和此對象的十六位哈希碼,應該是不同的。
然後我把你的代碼自己運行了一下,列印出來的哈希碼也是不一樣的,不論是直接列印a和b由toString()方法默認返回的,還是調用兩個對象中的hashCode()方法出來哈希碼都是不相同的。
a.equals(b)返回的是false說明a和b不相等,我查了一下API,根據API裡面寫的
hashCode 的常規協定是:

Java
應用程序執行期間,在對同一對象多次調用 hashCode 方法時,必須一致地返回相同的整數,前提是將對象進行 equals 比較時所用的信息沒有被修改。從某一應用程序的一次執行到同一應用程序的另一次執行,該整數無需保持一致。
如果根據 equals(Object) 方法,兩個對象是相等的,那麼對這兩個對象中的每個對象調用 hashCode 方法都必須生成相同的整數結果。
如果根據 equals(java.lang.Object) 方法,兩個對象不相等,那麼對這兩個對象中的任一對象上調用hashCode 方法不 要求一定生成不同的整數結果。但是,程序員應該意識到,為不相等的對象生成不同整數結果可以提高哈希表的性能。
說明相同的對象,哈希碼必須相同。不同的對象,哈希碼不一定不同。
我查了下資料,哈希碼的生成函數不能保證不同對象生成的哈希碼一定相同,有很小很小的幾率會相同,
不會被你裝上了吧?
還是其他class的干擾呢?你把重新建一個文件夾,把java文件復制進去,然後編譯運行看下還是不是一樣。
我也是剛學java的,工作比較無聊我就學了下java,剛學了1個半月吧。能力有限,我把我懂得都寫出來,希望能幫到樓主。

㈦ JAVA 對象類equals方法的覆蓋

第一個Circle 類 你寫了一個以Circle 為參數的equals方法,而它本身也有一個來源於Object 的以Object 為參數的equals方法(Java中Object是所有類的父類). 這里就有兩個equals方法了:

classCircle{
doubleradius;

publicbooleanequals(Circlecircle){
returnthis.radius==circle.radius;//Circle
}

publicbooleanequals(Objectobj){
return(this==obj);//Object
}
}

而你的circle2類型為Object ,這里就會匹配 以Object為參數的方法.這個方法是直接比較兩個對象的, 所以值是false

而第二個Circle 類 你寫了一個以Object為參數的equals方法 , 與來源於Object 的以Object 為參數的equals方法(Java中Object是所有類的父類)方法名,參數類型完全相同. 這里 你這個equals方法就覆蓋了父類Object的equals方法:

classCircle{
doubleradius;

publicbooleanequals(Objectcircle){
returnthis.radius==((Circle)circle).radius;
}
}

在此,circle1.equals(circle2)調用的就是覆蓋了equals的方法即返回的是:his.radius == ((Circle)circle).radius.

因為radius是基本數據類型,所以==比較的是他兩的值,兩個默認都為0.0 所以為true

㈧ 有關於Java中對象比較「==」和「equals()」,下面有一個程序為例

this.title的數據類型是String,屬於引用數據類型,引用類型的比較一般使用equals方法來判斷兩個對象的內容是否相等。因為this.title是一個String對象,因而可通過點運算符來調用equals方法來比較兩個String對象的內容是否相等。
this.price的數據類型是double,屬於基本數據類型,基本數據類型的比較直接使用==來判斷其值是否相等。因為this.price是一個基本類型的變數不是一個對象,因而不能通過點運算符來調用equals方法。

閱讀全文

與javaequals對象相關的資料

熱點內容
海龜編輯器積木編程怎麼安裝 瀏覽:175
程序員理發店生意怎麼樣 瀏覽:601
程序員羅技 瀏覽:180
軟考初級程序員課程2021下載 瀏覽:487
杭州程序員奶奶 瀏覽:878
不聽命令造成錯誤 瀏覽:979
kool系統源碼 瀏覽:608
流氓app在哪裡看 瀏覽:98
域名購買了怎麼指向伺服器 瀏覽:121
安卓手機如何讓照片顏色反轉 瀏覽:859
怎麼下載卓睿安手機版 瀏覽:514
h3crange命令 瀏覽:468
php前景和python 瀏覽:338
php壓縮圖片內存大小 瀏覽:495
在哪裡可以查看雲伺服器的信息 瀏覽:70
python讀取非txt文件 瀏覽:799
艾莫迅用什麼編程軟體好 瀏覽:227
android文件存儲讀取 瀏覽:214
php基礎教程第5版 瀏覽:543
伺服器裡面怎麼刷東西 瀏覽:194