java對象相等
Ⅰ java 怎麼判斷兩個對象是否相等
java中如果兩對象(obj1,obj2)相等,那麼在修改obj2的時候,obj1的值也會改變。其實相當於內存中只有一個對象,而obj1和obj2連個變數都指向同一個對象。
如果兩個變數引用的是兩個不同地址的對象,即使對象的內部參數都是一樣的,系統也會認為是不同的兩個對象
至於比較方法,簡單一點的可以使用==。嚴謹一些就用equals
Ⅱ java中equals使用方法
java中equals使用方法:
equals 方法是String類從它的超類Object中繼承的, 被用來檢測兩個對象是否相等,即兩個對象的內容是否相等,區分大小寫。
對於字元串變數來說,使用「==」和「equals()」方法比較字元串時,其比較方法不同。「==」比較兩個變數本身的值,即兩個對象在內存中的首地址。「equals()」比較字元串中所包含的內容是否相同。例如:
s1=newString("abc");
s2=newString("abc");s1.equals(s2)是true
3.對於非字元串變數來說,"=="和"equals"方法的作用是相同的都是用來比較其對象在堆內存的首地址,即用來比較兩個引用變數是否指向同一個對象。
classA
{
Aobj1=newA();
Aobj2=newA();
}
obj1.equals(obj2)是false
Ⅲ java淺拷貝的對象兩個內向相等嗎
兩個對象內向相等。
java對象默認繼承java。long。Object類,裡麵包含clone方法。JDKAPI的說明文檔解釋這個方法將返回Object對象的一個拷貝。要說明的有兩點:一是拷貝對象是一個新對象,而不是一個引用。二是拷貝對象與用new操作符返回的新對象的區別就是這個拷貝已經包含了一些原來對象的信息,而不是對象的初始信息。
java中的基本數據類型判斷是否相等,直接使用==就行了,相等返回true,否則,返回false。
Ⅳ 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的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 中如何比較兩個數組對象的內容是否相等急
char[] a = {'a', 'b'};
char[] b = {'a', 'f'};
String sa = String.valueOf(a);
String sb = String.valueOf(b);
if( sa.equals(sb) )
System.out.println("兩個數組相等");
else
System.out.println("兩個數組不相等");