亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如視頻教程,若我用父類animal創建一個對象dog,,用子類dog創建一個dog2,并對兩個對象的name和age賦相同的值,用equal方法對比時為什么顯示不相同?

如視頻教程,若我用父類animal創建一個對象dog,,用子類dog創建一個dog2,并對兩個對象的name和age賦相同的值,用源碼改過equal方法,對比時為什么顯示不相同?核心代碼如下:

package?com.imooc;

public?class?Pig?{
	public?int?age=20;
	public?String?name="pig";
	@Override
	public?boolean?equals(Object?obj)?{
		if?(this?==?obj)
			return?true;
		if?(obj?==?null)
			return?false;
		if?(getClass()?!=?obj.getClass())
			return?false;
		Pig?other?=?(Pig)?obj;
		if?(age?!=?other.age)
			return?false;
		if?(name?==?null)?{
			if?(other.name?!=?null)
				return?false;
		}?else?if?(!name.equals(other.name))
			return?false;
		return?true;
	}	
}
public?class?Pig2{
	public?int?age=20;
	public?String?name="pig";	
}
public?class?Initial?{

	public?static?void?main(String[]?args)?{
		Pig?pig=new?Pig();
		Pig2?pig2=new?Pig2();
		if(pig.equals(pig2)){
			System.out.println("相同");
		}else?{
			System.out.println("不相同");
		}
		
	}

}


正在回答

4 回答

http://img1.sycdn.imooc.com//57943c9d00012c7505470880.jpg我剛又問了一下我們老師、不同類中的對象根本就沒有可比性

0 回復 有任何疑惑可以回復我~
#1

Edward_Xie 提問者

非常感謝!
2016-07-24 回復 有任何疑惑可以回復我~

if?(getClass()?!=?obj.getClass())

????????????return?false;

理解這一句的含義。


0 回復 有任何疑惑可以回復我~

equals()方法比較的是同一個類中的多個對象,你創建了兩個類,兩個類中的對象引用地址肯定不相同啊,代碼?if?(this?==?obj),return?true;就是判斷引用地址是否相同,這一步得到的是false,后面就不再執行了,直接到最后運行結果“不相同”、我把視頻里的代碼在eclipse敲出來了,有注釋,你可以看下。


public class Mk0_4 {


?public static void main(String[] args) {
??Phone p1 = new Phone();
??p1.a = "imooc";
??p1.b = 20;
??p1.c = 3.14f;
??Phone p2 = new Phone();
??p2.a = "imooc";
??p2.b = 20;
??p2.c = 3.14f;
??if(p1.equals(p2)){
???System.out.println("兩個對象相同");
??}else{
???System.out.println("兩個對象不相同");
??}
?}
}
class Phone{
?String a;
?int b;
?float c;
//比較兩個對象中的每一個值
?public boolean equals(Object obj) {
??if (this == obj)//判斷兩個引用的值是否相等,即引用的地址是否相同,若引用地址相同,則是同一個值返回true
???return true;
??if (obj == null)//若一個對象的值為空值,則無意義,返回false
???return false;
??if (getClass() != obj.getClass())//getClass得到的是類對象,new一個對象時,得到的是類的對象,obj.getClass得到的是類的對象,此行代碼通過類對象判斷兩個對象的類型是否相同
???return false;//若兩個對象的類型都不相同則肯定不相同,返回false
??Phone other = (Phone) obj;//執行到這里則兩個對象的類型肯定相同,則可以將傳進來的對象轉換為Phone類型
??if (a == null) {//轉換為相同的類型后才可以進行屬性比較,若兩個對象的屬性值相同,則兩個對象相同
???if (other.a != null)
????return false;
??} else if (!a.equals(other.a))
???return false;
??if (b != other.b)
???return false;
??if (Float.floatToIntBits(c) != Float.floatToIntBits(other.c))
???return false;
??return true;
?}
}



0 回復 有任何疑惑可以回復我~
#1

南山至南

你說的不對吧,if (this == obj),return true;這行代碼判斷了兩個對象是否為同一對象,不論是一個類創建兩個對象,還是兩個類創建兩個對象,這行代碼肯定不會通過,繼續執行下面代碼進行判斷,后邊的代碼怎么不會執行了?
2016-08-03 回復 有任何疑惑可以回復我~

equal比較的是兩個對象的內存地址。因為實例化的兩個對象雖然對象屬性是相同的,但是他們的地址不同,所以equal比較也會不同

0 回復 有任何疑惑可以回復我~
#1

Edward_Xie 提問者

不好意思,我沒說清楚問題,我是用源碼里的改過的equal,用來對比屬性的equal
2016-07-23 回復 有任何疑惑可以回復我~
#2

有些人一直都在 回復 Edward_Xie 提問者

可以再詳細的說一下你的問題嗎,看不太明白你想問什么
2016-07-24 回復 有任何疑惑可以回復我~
#3

Edward_Xie 提問者 回復 有些人一直都在

如上代碼,我創建了兩個類,pig和pig2,他們都只有兩個屬性,age和name,且都初始化為相同的值,然后我重寫了pig類中的equals代碼,讓他實現比較兩個對象屬性是否相等的功能,最后在主函數中創建兩個類的對象,用equals對比的時候發現輸出不相同,可是我的兩個對象屬性一樣,值也一樣,不知道為什么?是不是只有子類對象和父類對象對比才可能相等?
2016-07-24 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

如視頻教程,若我用父類animal創建一個對象dog,,用子類dog創建一個dog2,并對兩個對象的name和age賦相同的值,用equal方法對比時為什么顯示不相同?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號