當前位置:首頁 » 編程語言 » java對象比較

java對象比較

發布時間: 2022-07-21 04:56:29

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

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

在HashSet中比較兩個對象是否相等的方法是:先比較兩個對象的hashCode()值是否相等,如果不相等就認為兩個對象是不相等的,如果兩個對象的hashCode相等就繼續調用equals()方法進一步判斷兩個對象是否相等,如果equals()方法返回true認為兩個對象相等,返回false認為兩個對象不相等。

❹ 如何比較java對象是同一個對象

1.判斷兩個對象是否是同一個引用對象則用==,"=="比的是地址.因為如果地址相同,則就是同一個對象
2.obj1.equals(Object obj2),用來判斷兩個對象是否相等(前面給出的是相等的情況。如果你要不相等的話:!obj1.equals(Object obj2)就可以了

❺ 如何在Java中實現對象比較

一、跟對象比較的幾個相關的概念。 為了更加審核的理解對象比較的含義以及多個比較方法之間的差異,筆者認為讀者首先需要了解幾個相關的概念,或者說幾對關系。 一是類與對象的關系。類是具體的抽象,而對象是類的具體實現。這可能聽起來還是有點模糊。做一個形象的比喻,類就好像是用來製作塑料盒子的模具,只要將PVC料注入到這個模具中就可以生產對應形狀的盒子。而對象就好像是生產出來的盒子。雖然模具同一個,但是生產出來的盒子彼此之間仍然是不同的。一方面先天性就是不同的。因為根據相對論可以說明世界上沒有兩個相同的東西。其次後天性的影響,也會導致其不同。如生產出來後,在兩個盒子上分別貼上不同的條碼,他們兩個就代表不同的盒子了。了解這個類與對象之間的關系,對於了解對象之間進行比較,會有很大的幫助。 二是需要知道類與對象在內存中的實際存儲情況。當程序員定義一個類時(不含有靜態成員或者變數),一般不會在內存中給其分配一個存儲結構。而只有定義對象時,才會在內存中分配存儲結構。當利用同一個類定義不同的對象時,系統會在內存中為不同的對象創建不同的存儲結構。也就是說,會對應不同的內存地址。雖然同一個類中定義出來的對象,其內容可能相同(成員變數、成員方法等等都相同),但是其內存中的地址仍然是不同的。 三是需要注意對象的復制問題。如果要創建幾個內容相同的對象,即復制相同內容的對象,現在主要有兩種方法。一是通過成員變數賦值來完成。如在根據同一個類創建對象時,分別給與他們相同的初始化值。那麼這兩個對象的內容就是相同的。二是通過地址賦值來完成。即將第一個對象在內存中的地址賦值給第二個對象。此時兩個對象名字雖然不同,但是他們卻指向內存中的同一塊區域。此時就好像一個人有兩個名字,其實是同一個人。所以這兩個對象內容也就相同了。 二、利用==運算符與equals方法來比較對象。 在Java語言中,主要可以利用==運算符(兩個等號)和equal函數來對對象進行比較。不過這兩個符號其實現的機制不同。或者說,對於同樣的兩個對象,如果利用他們來進行比較的話,往往會有不同的結果。如String是Java自定義的對象,其主要用來存儲字元串數據。現在筆者利用如下語句定義了三個String對象。 String str1=new String(「welcome」); //創建一個對象,給利用單詞welcome初始化 String str2=new String(「welcome」); //創建一個對象,給利用單詞welcome初始化 String str3=str1; //創建一個對象,並利用對象str1的地址賦值 以上三個對象,顯而易見,其內容都是相同的。但是利用這個兩種方式來對他們進行比較的時候,往往會有不同的結果。如利用==(兩個等號)比較符號來進行比較,str1==str2,最後返回的結構是false,也就是他們是不相同的對象。可是如果比較str1==str3對象,則最後返回的結果卻是true。但是利用equal函數來比較,則返回的結果是相同的。為什麼對象的內容相同,它們返回的結果卻是不同的呢?

❻ java怎麼只比較兩個對象的內容

使用 == 進行比較, 該方式比較的是變數是否同時指向一塊內存地址,如果是就返回true,否則返回false
使用對象本身的equals進行比較,equals首先會進行 == 比較,然後會進行邏輯比較,當然你可以自己定義自己的比較邏輯,比如JDK內置的String,Integer,Long等都是重寫了這個equals方法的。
總的來說就是 == 表示完全相等,而equals表示邏輯相等

❼ java怎麼比較兩個對象是否相等

一、java中的基本數據類型(int、double、short、long、byte、float、boolean、char)判斷是否相等,直接使用"=="就行了,相等返回true,否則,返回false。

二、但是java中的引用類型的對象比較變態,假設有兩個引用對象obj1,obj2,

obj1==obj2 判斷是obj1,obj2這兩個引用變數是否相等,即它們所指向的對象是否為同一個對象。言外之意就是要求兩個變數所指內存地址相等的時候,才能返回true,每個對象都有自己的一塊內存,因此必須指向同一個對象才返回ture。

三、如果想要自定義兩個對象(不是一個對象,即這兩個對象分別有自己的一塊內存)是否相等的規則,那麼必須在對象的類定義中重寫equals()方法,如果不重寫equals()方法的話,默認的比較方式是比較兩個對象是否為同一個對象。

在Java API中,有些類重寫了equals()方法,它們的比較規則是:當且僅當該equals方法參數不是 null,兩個變數的類型、內容都相同,則比較結果為true。這些類包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常見的就這些了,具體可以查看API中類的equals()方法,就知道了。

❽ java 怎麼判斷兩個對象是否相等

java中如果兩對象(obj1,obj2)相等,那麼在修改obj2的時候,obj1的值也會改變。其實相當於內存中只有一個對象,而obj1和obj2連個變數都指向同一個對象。
如果兩個變數引用的是兩個不同地址的對象,即使對象的內部參數都是一樣的,系統也會認為是不同的兩個對象
至於比較方法,簡單一點的可以使用==。嚴謹一些就用equals

❾ java怎麼比較2個對象

你這個compareTo方法是幹啥的?思路不清啊....
你應該寫的是一個點的對象(Position)..他要和別一個點(Position
)去比較.所以至少你的Position
類中的compareTo這個方法里要獲得別一個點的對象.
也就是說應該在實現類中有這樣的形式
點1對象.compareTo(點2對象);//說白了就是你的實現類里這行
System.out.println("兩點到原點的距離之差為"+compareTo());
應該改成
System.out.println("兩點到原點的距離之差為"+a.mpareTo(b);
在計較的時候.也就是你的compareTo()這個方法里..就應該是對象1的距離-對象2的舉例
也就是類似這樣的.
Math.sqrt(a.getx()*a.getx()*+a.gety()*a.gety())-Math.sqrt(b.getx()*b.getx()+b.gety()*b.gety();//

❿ java中比較兩個對象的大小需要實現哪個介面

忽略模板的情況,需要實現
java.lang.Comparable
並實現int
compareTo
(Object
o)
這個方法表示當前對象(this)和o對象比較的結果。如果當前對象比較大返回正數,如果o對象比較大返回負數,如果兩個對象相等返回0

熱點內容
安卓快手極速版在哪裡填寫邀請碼 發布:2025-01-31 22:59:36 瀏覽:319
如何讓給文件夾設置密碼查看 發布:2025-01-31 22:49:07 瀏覽:2
配置動態路由協議配錯了怎麼改 發布:2025-01-31 22:49:07 瀏覽:77
掃行程碼為什麼需要支付密碼 發布:2025-01-31 22:47:08 瀏覽:738
什麼樣的配置能玩地平線4 發布:2025-01-31 22:44:05 瀏覽:241
python正則表達式符號 發布:2025-01-31 22:43:50 瀏覽:391
androidmime 發布:2025-01-31 22:34:44 瀏覽:782
ftp和http的中文含義是 發布:2025-01-31 22:33:48 瀏覽:402
sqlite3存儲圖片 發布:2025-01-31 22:27:14 瀏覽:162
sqlserverphp 發布:2025-01-31 22:22:55 瀏覽:877