为了账号安全,请及时绑定邮箱和手机立即绑定

为什么结果还是显示一样的,两个age的值都不一样

https://img1.sycdn.imooc.com//5b50392d0001c06205010452.jpg

https://img1.sycdn.imooc.com//5b50395e000150e301670032.jpg


为什么结果还是显示一样的,两个age的值都不一样

正在回答

6 回答

public class HelloWorld{
    public static void main(String[] args) {
        Dog1 d = new Dog1();
        d.age = 20;
        Dog1 d1 = new Dog1();
        d1.age = 45;
        if (d.equals(d1)){
            System.out.println("两个对象是相同的");
        }else {
            System.out.println("两个对象是不同的");
        }
    }
}

结果:两个对象是不同的

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

慕瓜4577637

应该是你的equals()写的有问题。
2018-08-19 回复 有任何疑惑可以回复我~

你把你重写的equals的代码也发出来看看?


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

public class HelloWorld {

    

    public static void main(String[] args){

HelloWorld h =new HelloWorld();

HelloWorld h1 =new HelloWorld();

if(h.equals(h1))

{

   System.out.println("相同");

}else

{

   System.out.println("不同");

}

}

}

/*结果输出为:不同*/

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

左眼呈过去

那为什么他的输出的是相同?
2018-07-26 回复 有任何疑惑可以回复我~

你比较的并不是age。。。而是整个对象  d和d1 都是来自同一个地址Dog1的,要是想比较age你可以这样写:

if(d.age.equals(d1.age)) 再输出看看

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

慕仔2498183

我写错了,这样写会报错
2018-07-19 回复 有任何疑惑可以回复我~

注意:equals方法不能作用于基本数据类型的变量

  如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

  诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

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

慕沐8454760 提问者

重写了呀
2018-07-19 回复 有任何疑惑可以回复我~

 首先 , equals方法不是用来比较两个值是否相等,而是用来比较两个对象的引用是否相等,即是否指向同一个对象,或者引用类型的变量所指向的对象的地址;你的代码里面,两个age都是通过同一个对象Dog1来赋值的,所以输出的结果为 “两个对象为相同的”。

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

慕沐8454760 提问者

但我是在我是在source里面生成了equal hasi方法
2018-07-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么结果还是显示一样的,两个age的值都不一样

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信