第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

怎么比較兩個(gè)不同子類的值是否相等?

package?com.imooc;

public?class?Animal?{
????public?String?name;
????public?int?age;

????@Override
????public?boolean?equals(Object?obj)?{
????????if?(this?==?obj)
????????????return?true;
????????if?(obj?==?null)
????????????return?false;
????????if?(getClass()?!=?obj.getClass())
????????????return?false;
????????Animal?other?=?(Animal)?obj;
????????if?(age?!=?other.age)
????????????return?false;
????????return?true;
????}
}
package?com.imooc;

public?class?Dog?extends?Animal?{

}
package?com.imooc;

public?class?Cat?extends?Animal?{

}
package?com.imooc;

public?class?Initial?{
????public?static?void?main(String[]?args)?{

????????Dog?dog?=?new?Dog();
????????Dog?dog2=new?Dog();
????????Cat?cat?=?new?Cat();
????????dog.age=1;
????????dog2.age=1;
????????cat.age=1;

????????if(dog.equals(dog2)){
????????????System.out.println("dog和dog2的age相同");
????????}else{
????????????System.out.println("dog和dog2的age不同");
????????}

????????if(dog.equals(cat)){
????????????System.out.println("dog和cat的age相同");
????????}else{
????????????System.out.println("dog和cat的age不同");
????????}
????}
}

結(jié)果為dog和dog2的age相同,dog和cat的age不同

為什么new同一個(gè)子類時(shí),equals可以比較屬性值,而new不同子類時(shí),不能比較屬性值,怎么修改才能比較不同子類的屬性值

謝謝


正在回答

11 回答

把?這個(gè)代碼換成下面那個(gè)

?Cat cat = new Cat();

換成這個(gè)以后 就是相同的了

Dog cat = new Dog();


至于為啥比較出來(lái)不相同 是因?yàn)?它們的類型就是不一樣的 所以還沒(méi)有比到值 直接在類型這里就返回 flase了

所以不同,修改成相同的類型以后就能比較了

還有想比較兩個(gè)類的數(shù)據(jù)是否相同 可以直接使用 == 來(lái)進(jìn)行對(duì)比

if (dog.age ?==?dog2.age){

? ? ??System.out.println("dog和dog2的age相同");

????????}else{

????????????System.out.println("dog和dog2的age不同");

????????}

? ? ? ??

if (dog.age ?==?cat.age=1){

? ? ?System.out.println("dog和cat的age相同");

????????}else{

????????????System.out.println("dog和cat的age不同");

????????}

這樣就可以對(duì)比了=-= 簡(jiǎn)單粗暴~望采納

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Half_Life 提問(wèn)者

Animal[] animal={new Dog(),new Cat()} 這樣的話好像就不可以了,具體請(qǐng)看樓下,謝謝
2016-04-08 回復(fù) 有任何疑惑可以回復(fù)我~

都是初學(xué)者,好吧,哭

0 回復(fù) 有任何疑惑可以回復(fù)我~

天吶,能不能用簡(jiǎn)單一點(diǎn)的代碼來(lái)寫啊。這本身不是很復(fù)雜的問(wèn)題,但是你的代碼看得我眼花了。

0 回復(fù) 有任何疑惑可以回復(fù)我~

是的 目前我們所學(xué)的知識(shí)就是后面可以這么去理解 等到后面慢慢累積了更多知識(shí)了 就會(huì)理解的更加透徹,現(xiàn)在先理解大概是個(gè)啥意思有一個(gè)認(rèn)識(shí) 就好了 不能說(shuō)完全懂了 也不能完全都不懂 ,我現(xiàn)在和你所說(shuō)的這些也算是我個(gè)人學(xué)到現(xiàn)在的一些理解,有的地方也不是百分之百正確,基本上大概這么個(gè)意思 所以有的東西還是需要自己多多去琢磨 自己琢磨透徹了 在聽(tīng)別人稍微講解一下 是很容易理解 和加深記憶的~

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Half_Life 提問(wèn)者

int i1=1;//基本數(shù)據(jù)類型 Integer i3=new Integer(1);//引用數(shù)據(jù)類型,利用包裝類把基本數(shù)據(jù)類型包裝成引用數(shù)據(jù)類型 基本數(shù)據(jù)類型如果變量值相等,則兩個(gè)變量都指向同一個(gè)內(nèi)存地址; 引用數(shù)據(jù)類型即使變量值相等,也可能引用的是不同的內(nèi)存地址 ==比較內(nèi)存地址,equals()比較值 基本數(shù)據(jù)類型包括byte, short, long, int, float, double, boolean, char 引用數(shù)據(jù)類型包括字符串String、數(shù)組、類、接口
2016-04-09 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Half_Life 提問(wèn)者

比較基本數(shù)據(jù)類型時(shí)用==,應(yīng)用數(shù)據(jù)類型時(shí)用equals()
2016-04-09 回復(fù) 有任何疑惑可以回復(fù)我~
#3

qq_文_17 回復(fù) Half_Life 提問(wèn)者

哈哈,闊以的! 這樣總結(jié)一下 理解的就清晰多了,不會(huì)迷糊了~ 學(xué)習(xí)路漫漫~ 多多努力~
2016-04-11 回復(fù) 有任何疑惑可以回復(fù)我~

new 同一個(gè)類 用==比較的是 它們的類型 或者說(shuō)是內(nèi)存地址 這個(gè)東西它們是使用的一樣的


不同類的時(shí)候 == 就無(wú)法比較類了,因?yàn)?類型不同 所在的 空間地址也不一樣 內(nèi)存地址也是不同的


但是?equals() 在String 字符串中 比較的時(shí)候 他比較的是兩個(gè) 變量的 內(nèi)容是不是一樣的 并不是去比較類型

和內(nèi)存地址 所以不同的類 就是 需要使用equals()來(lái)比較?


equals() 重寫 只是拿來(lái)比較對(duì)象的 ?來(lái)對(duì)比這個(gè)兩個(gè) 對(duì)象中間的類型 是否一致 它的屬性是否一致

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Half_Life 提問(wèn)者

謝謝,有點(diǎn)懂了,也還是有點(diǎn)迷糊。。。 ==在比較基本數(shù)據(jù)的時(shí)候是直接比較的數(shù)值,在比較引用數(shù)據(jù)類型的時(shí)候比較的是內(nèi)存地址。 而視頻例子中如果比較的是dog.age==dog2.age,也就是在比較基本數(shù)據(jù)類型所以可以用==,但視頻中比較的是dog==dog2,所以就必須用equals(),而且還因?yàn)榉謩enew了,所以內(nèi)存地址不同,就必須重寫equals()才可以比較數(shù)值
2016-04-08 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_文_17 回復(fù) Half_Life 提問(wèn)者

http://zhidao.baidu.com/link?url=sBTDm0r0or_eLyZPHnsGs6-NswPnHsb-O44XPBdACIwXxuD4-Lnymko8aLVTm_WolnxFX7OmWuxjHJf57d9DsHoON6X_MauWt23wJxei24K 有時(shí)間可以看看這個(gè) 上面的回答比較直接簡(jiǎn)明一些
2016-04-09 回復(fù) 有任何疑惑可以回復(fù)我~
name?測(cè)試過(guò)調(diào)試輸出?name[i]?有數(shù)值嗎??=-=?正常賦值了以后是可以判斷和對(duì)比的

但是不要用等于號(hào)了?直接用???equals()?比較?

貓.equals("貓")??這樣就是判斷?貓這個(gè)字符串是否和?貓這個(gè)字符串?相等


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Half_Life 提問(wèn)者

迷糊了,為什么new同一個(gè)類的時(shí)候==就可以了,new不同類的時(shí)候直接equals()就可以了,但是例子中的quals()重寫啥時(shí)候用?
2016-04-08 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_文_17 回復(fù) Half_Life 提問(wèn)者

new 同一個(gè)類 用==比較的是 它們的類型 或者說(shuō)是內(nèi)存地址 這個(gè)東西它們是使用的一樣的 不同類的時(shí)候 == 就無(wú)法比較類了,因?yàn)?類型不同 所在的 空間地址也不一樣 內(nèi)存地址也是不同的 但是 equals() 在String 字符串中 比較的時(shí)候 他比較的是兩個(gè) 變量的 內(nèi)容是不是一樣的 并不是去比較類型 和內(nèi)存地址 所以不同的類 就是 需要使用equals()來(lái)比較 equals() 重寫 只是拿來(lái)比較對(duì)象的 來(lái)對(duì)比這個(gè)兩個(gè) 對(duì)象中間的類型 是否一致 它的屬性是否一致 ?
2016-04-08 回復(fù) 有任何疑惑可以回復(fù)我~
package?com.imooc;

public?class?Animal{
????String?name;
????int?no;
}
package?com.imooc;

public?class?Dog?extends?Animal?{
????public?Dog(){
????this.name="狗";
????this.no=1;
????}
}
package?com.imooc;

public?class?Cat?extends?Animal?{
????public?Cat(){
????this.name="貓";
????this.no=2;
????}
}
package?com.imooc;
import?java.util.Scanner;

public?class?Initial?{
????static?Animal[]?animal={new?Dog(),new?Cat()};
????public?static?void?main(String[]?args)?{
????????Scanner?input=new?Scanner(System.in);
????????System.out.println("請(qǐng)選擇方式:\n1.按品種選擇\n2.按序號(hào)選擇");
????????int?choose=input.nextInt();
????????if(choose==1){
????????????searchByName(animal);
????????}else?if(choose==2){
????????????searchByAge(animal);
????????}
????????input.close();
????}
????static?void?searchByName(Animal[]?animal){
????????Scanner?input=new?Scanner(System.in);
????????System.out.println("全部動(dòng)物如下:\n序號(hào)\t品種");
????????for(int?i=0;i<animal.length;i++){
????????????System.out.println(animal[i].no+"\t"+animal[i].name);
????????}
????????System.out.print("請(qǐng)輸入動(dòng)物名:");
????????String?choose1=input.next();
????????for(int?i=0;i<animal.length;i++){
????????????System.out.println(animal[i].name+choose1);
????????????if(animal[i].name==choose1){
????????????????System.out.println("選擇"+choose1+"成功");
????????????????exitOrContinue(1);
????????????}else?if(i==animal.length-1&&choose1!=animal[i].name){
????????????????System.out.println("選擇"+choose1+"失敗");
????????????????exitOrContinue(1);
????????????}
????????}
????????input.close();
????}
????static?void?searchByAge(Animal[]?animal){
????????Scanner?input=new?Scanner(System.in);
????????System.out.println("全部動(dòng)物如下:\n序號(hào)\t品種");
????????for(int?i=0;i<animal.length;i++){
????????????System.out.println(animal[i].no+"\t"+animal[i].name);
????????}
????????System.out.println("\n請(qǐng)輸入序號(hào)");
????????int?choose2=input.nextInt();
????????if(choose2>0&&choose2<=animal.length){
????????????if(choose2==animal[(choose2-1)].no){
????????????????System.out.println("選擇"+choose2+"成功");
????????????????exitOrContinue(2);
????????????}else{
????????????????System.out.println("選擇"+choose2+"失敗");
????????????????exitOrContinue(2);
????????????}
????????}
????????input.close();
????}
????static?void?exitOrContinue(int?eoc){
????????Scanner?input=new?Scanner(System.in);
????????System.out.println("是否繼續(xù):\n1.繼續(xù)選擇\n2.退出");
????????int?choose3=input.nextInt();
????????if(choose3==1){
????????????if(eoc==1){
????????????????searchByName(animal);
????????????}else?if(eoc==2){
????????????????searchByAge(animal);
????????????}
?????????}else?if(choose3==2){
????????????System.out.println("歡迎下次再來(lái)!");
????????}
????????input.close();
????}
}

no正常判斷,name就無(wú)法正常判斷了,即使是有值的

0 回復(fù) 有任何疑惑可以回復(fù)我~

要想nuw出來(lái)的東西直接帶有值

在子類里面 構(gòu)造一個(gè)方法 在這個(gè)里面賦值

public class Cat extends Animal{

public ?Cat(){

name ="狗";

age = 2;

}

}

這樣nuw出來(lái)的時(shí)候就直接有值了!


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Half_Life 提問(wèn)者

謝謝,我改好了之后,age可以判斷了,但是name還是無(wú)法判斷,name是不是就要用到重寫equals()?還是別的,麻煩了
2016-04-08 回復(fù) 有任何疑惑可以回復(fù)我~

animal[0].name = "狗";

0 回復(fù) 有任何疑惑可以回復(fù)我~

System.out.println(animal[0].name);

? ? ? ?System.out.println(animal[1].name);


在nuw了以后 打印這句話 你會(huì)發(fā)現(xiàn)你對(duì)象里面的 name是空的 木有值 所以找不到?


你給它賦予一個(gè)值以后 就可以去對(duì)比了 還有 字符串 是用?equals 去比較呢?


基本數(shù)據(jù)類型 比如 整形 布爾 ?浮點(diǎn)型 就用 ?== 去比較

0 回復(fù) 有任何疑惑可以回復(fù)我~
首頁(yè)上一頁(yè)12下一頁(yè)尾頁(yè)

舉報(bào)

0/150
提交
取消

怎么比較兩個(gè)不同子類的值是否相等?

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)