Pfeffer
Pfeffer
2017-08-12 13:23
采纳率: 53%
浏览 781
已采纳

equals 方法 java核心技术卷一

 public boolean equals(Object otherObject)
   {
      // a quick test to see if the objects are identical
      if (this == otherObject) return true;

      // must return false if the explicit parameter is null
      if (otherObject == null) return false;

      // if the classes don't match, they can't be equal
      if (getClass() != otherObject.getClass()) return false;

      // now we know otherObject is a non-null Employee
      Employee other = (Employee) otherObject;

      // test whether the fields have identical values
      return name.equals(other.name) && salary == other.salary && hireDay.equals(other.hireDay);
   }

为了防备name和hireDay可能为null的情况,需要使用Objects.equals方法.如果两个参数是null,Objects.equals(a,b)调用将返回ture; 如果其中一个参数为null, 则返回false;否则,如果两个参数都不为null,则调用a.equals(b).

对上述程序,有以下问题:
1. 以我目前对于方法和类的理解, public boolean equals(Object otherObject),返回的是一个布尔类型的,括号里面是声明一个otherObject, 这个Objects.equals(a,b)是哪儿来的, 不符合 public boolean equals(Object otherObject) 类型.

  1. 上述一段话中,还提到了Objects.equals(a,b) 对于判断参数是否是null的情况. 这个方法是怎么实现来判断被比较的两个参数是否都为null,或者其中一个是null?
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • dcxy0
    Q544471255 2017-08-13 03:33
    已采纳

    手机回复。

    如果你用eclipse的话,可以按住ctrl,点击equals方法名,可以看到源码。

    关于equals其实就是对比两个对象是否一致,Object里面只是一个基础实现,其子类可以对其进行重写。

    对于==和equals的区别,简单解释就是==比较地址,equals比较地址中的内容。

    点赞 评论
  • Small_Mouse0
    鼠小 2017-08-13 01:36

    (1)Objects.equals(a,b),,,首先,不知道你这个方法哪里来的,,,肯定不是官方给出的吧,
    equals 比较两个 对象的关系,,,连个对象,,,,Objects.equals(a,b)这个方法,,,三个对象

    (2)其次Object不可能是大写吧,Object中木有这个静态方法,,,而且每个对象都有,equals(O),这个方法,不需要借助其他进行对比。

    敲完上面两条,,突然发现,,看错了,,哈哈不知道你是不是也看错了 Objects,和Object两码事

    Objects是 package java.util; 这个包下的类,,他有个静态方法如下,,跟你的描述完全一致(jdk1.8亲测)

      public static boolean equals(Object a, Object b) {
            return (a == b) || (a != null && a.equals(b));
        }
    

    如果对你有帮助,,,,请采纳!!,,,纯手码

    点赞 评论
  • Pfeffer
    Pfeffer 2017-08-13 01:58

    可以,我去源码里面看一下

    点赞 评论
  • wojiushiwo945you
    毕小宝 2017-08-13 04:57
    首先,Java规范对equals和hashCode两个方法做了限制的,所以不建议字节重新类的equals方法,都是使用Eclipse自动生成的equals方法,以保证遵从Java的约定。
    其次,要理解equals的业务含义,就是不仅仅是相同对象,还包括在业务属性上的相等都可以归为相等,例如Employee,按照id相同的记录,就视为是两个相同对象,而不管他们是不是相同的引用地址。
    最后,建议也不用太纠结equals的方法的,从你贴出的代码,也好理解相同的含义就是相通引用、相同类型、而且某些属性的值相同就视为相等。因为不需要我们自己去写equals方法的,因为自己写还无法保证符合Java的规范约定。编辑器有自动生成equals方法的算法的。
    
    点赞 评论

相关推荐