zoukankan      html  css  js  c++  java
  • java基础篇之Object类

    1.Object类是所有类的超类

    2.Object类的equals方法

      public boolean equals(Object obj) {return (this == obj);}

      equals方法的目的是判断两个对象是否相等,返回boolean值,注意它的参数类型是Object。Object中默认实现是判断两个对象的引用是否相等,但很多时候这种判断没什么意思,更多的是判断对象的状态属性是否相等,因此我们要能够自行实现equals方法

      要实现equals方法首先要知道equals方法的特性 (1)自反性:x.equals(x),(2)对称性:x.equals(y) == y.equals(x),(3)传递性:x.equals(y),y.equals(z) =>x.equals(z),(4)一致性:x.equals(y)结果不变.(5),x不为null,x.equals(null)为false

      class Employee {
           private String name;
          private double salary;
          private Date hireDay;
        
          @Override
          public boolean equals(Object obj) {
              //如果对象完全一致
              if(this == obj) return true;
            
              //如果obj为null,返回null
              if(obj == null) return false;
            
              //如果类类型不匹配,它们也不可能相等

        /*

          说明一下用Class对象判断和用instanceof关键字判断的区别:

            a instanceof b 的判断出了自身对象还包括继承

            a.getClass() == b.getClass() 的判断不包括继承的情况

            具体用哪个还是要看你的需求:

              如果equals的语义在每个子类中有所改变,就是用getClass检测

              如果所有的子类拥有统一的语义,就是用instanceof检测

        */
              if(getClass() != obj.getClass()) return false;
            
              //现在我们能确定obj是非空对象的Employee对象
              Employee other = (Employee)obj;
            
              //测试对象属性是否完全相等
              /*用Objects.equals主要是为了防备属性为null的情况*/
        return Objects.equals(name, other.name)
                      && salary == other.salary
                      && Objects.equals(hireDay, other.hireDay);      

        }
      }

    3.hashCode方法

      public native int hashCode();

      哈希码又称散列码,是由对象导出的一个整型值,默认实现返回的是对象的地址.

      如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中

      两个对象,如果hashCode值不想等,则两个对象一定不相等,反之对象相等,hashcode也相等。但hashcode相等,两个对象不一定相等

      一种实现:

      public int hashCode() {return Object.hash(name,salary,hireDay);}

    4.toString方法

      该方法用于返回对象的字符串,在打印对象时会调用该方法

      默认实现

      public String toString() {

        return getClass().getName() + "@" + Integer.toHexString(hashCode());

      }

      自己实现:

      public String toString() {

        return getClass().getName() + "[name=" + name +",salary=" + salary + ",hireDay=" + hireDay + "]";

      }

  • 相关阅读:
    React学习笔记(六)事件处理
    React学习笔记(五)State&声明周期
    学会装逼,你的人生可能会开挂
    Go指南
    JavaScript检测数据类型
    $.on()方法和addEventListener改变this指向
    JavaScript返回上一页
    js继承
    js原型二
    全局变量与局部变量
  • 原文地址:https://www.cnblogs.com/coffee9527/p/8665105.html
Copyright © 2011-2022 走看看