Pfeffer
2017-08-11 06:51
采纳率: 53%
浏览 821
已采纳

equals 方法 Java 核心技术卷一

图片说明

所有的问题都在图片中,求解答

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • kbc_kbc 2017-08-11 07:53
    已采纳

    对于两个对象是否“相等”, 我们有两种比较。
    1>this==otherobject
    如果两个对象用“==”来比较,那就是比较对象的引用(引用呢,就是存放在栈区的一个变量。它的值就是对象的地址。而对象真正是放在堆区的,你要使用它就找它的引用就好啦(也就是那一串地址))
    每一个new出来对象都分配不同的堆空间,所以引用就不一样。
    反之用“==”来比较,就是比较这两个对象在堆空间是不是一个地址。如果一样,那肯定是一样喽
    2>就是这个equals()方法用来比较具体的对象的属性。因为两个地址不同的对象,虽然地址不同 但是可能属性一样,

    打赏 评论
  • 风舞夜樱 2017-08-11 07:11

    1.getClass()调用的是当前对象的getClass()方法,getClass为非静态方法,而equals()方法也是非静态的,皆为当前对象所调用
    2.此时比较的是OtherObject与当前对象
    使用时为

    Object o = new Object(1);
    Object other = new Object(2);
    
    o.equals(other);
    

    3.先比较两者的地址,地址相同则两对象必然相同,
    再看otherObject是否为空,若为空,则两对象必然不同
    最后看两者是否为同一类,若所属类不同则两对象不同

    打赏 评论
  • summer_zh 2017-08-11 07:12

    你好,从你提的问题可以看出你应该刚学java没多久,其实这很好理解。
    分别解答你的3个问题:
    1、getclass() 调用和你想的一样,是省略了this,方法调用时不写默认是调用本身对象的方法。
    2、equals 是判断两个对象是否相等。而不是判断地址是否相等。
    3、this==otherobject 这个才是比较引用的地址;
    otherObject == null 判断是为了下一步调用otherObject 对象,不出现空指针异常。
    比较class是否相同时为了下面的强制转换类型
    希望采纳。

    打赏 评论
  • Pfeffer 2017-08-11 07:30

    我对于 前面三个if存在的意义完全不理解

    打赏 评论
  • Pfeffer 2017-08-11 08:00

    图片说明 这个图片中的内容就是告诉我们equals 比较的实际上是引用

    打赏 评论
  • kbc_kbc 2017-08-12 01:52

    难道你不满意我的回答啊,怎么不采纳呢?

    打赏 评论
  • Coding Sir 2017-08-12 14:47

    首先看下Object类的equals源码:

    • @param obj the reference object with which to compare.
      • @return {@code true} if this object is the same as the obj
      • argument; {@code false} otherwise.
      • @see #hashCode()
      • @see java.util.HashMap */ public boolean equals(Object obj) { return (this == obj); } 源码中就是用的==,而==只是比较栈内存中的内容,而栈内存中记录的就对象的引用 这是对图片的说明。 而现在我们需要比较的雇员是相同,而且有要求。那么我们应该从以下开启入手: 1、首先2个对象的引用地址是否相同,如果地址相同那么内容一定相同,这就是第一个if 2、验证下被比较者是否为null,为null直接出结果。而当前对象为null的话,直接空指针异常,这是第二个if 3、其次我们需要比较以下当前比较的2个对象的数据类型是否相同,所以使用个Class进行比较这就是第三个if 4、前面三个都验证了,再比较具体的内容是否相同 望采纳,有不明白的可以再交流
    打赏 评论

相关推荐 更多相似问题