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

来源:9-9 Java 中的 Object 类 Ⅱ

慕沐8454760

2018-07-19 15:10

https://img.mukewang.com/5b50392d0001c06205010452.jpg

https://img.mukewang.com/5b50395e000150e301670032.jpg


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

写回答 关注

6回答

  • 慕瓜4577637
    2018-08-19 18:30:11
    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("两个对象是不同的");
            }
        }
    }

    结果:两个对象是不同的

    慕瓜4577...

    应该是你的equals()写的有问题。

    2018-08-19 18:31:01

    共 1 条回复 >

  • 左眼呈过去
    2018-07-26 00:48:12

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


  • 慕仔2498183
    2018-07-19 17:43:23

    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("不同");

    }

    }

    }

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

    左眼呈过去

    那为什么他的输出的是相同?

    2018-07-26 00:46:56

    共 1 条回复 >

  • 慕仔2498183
    2018-07-19 17:30:31

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

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

    慕仔2498...

    我写错了,这样写会报错

    2018-07-19 17:39:42

    共 1 条回复 >

  • 慕仔2498183
    2018-07-19 17:21:41

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

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

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

    慕沐8454...

    重写了呀

    2018-07-19 17:23:05

    共 1 条回复 >

  • 慕仔2498183
    2018-07-19 15:46:30

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

    慕沐8454...

    但我是在我是在source里面生成了equal hasi方法

    2018-07-19 15:48:24

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530562 学习 · 6091 问题

查看课程

相似问题