Object类

作者: 油多坏不了菜 | 来源:发表于2018-12-28 00:36 被阅读0次

    方法

    • 获取对象的Class对象引用
      Class<?> getClass()
    • 计算hash值
      int hashCode();
    • equals方法
      Java中的 == 用于对象时比较时,仅判断引用是否相等。
      boolean equals(); //默认实现语义同 '==' 运算符
    • clone()
      Object clone();
    • toString()
      String toString();
    • notify()
      void notify();
    • notifyAll()
      void notifyAll();
    • wait();
      void wait(timeout)
      void wait()

    拷贝

    如果利用clone()方法拷贝,需要实现cloneable 接口
    因为对象中属性可能存在引用类型,所以就有所谓的深拷贝与浅拷贝。

    • 浅拷贝,新旧对象的引用指向同一内存区域。
    Class Birthday{
      int year;
      int month;
      ...
    }
    class Person{
      String name;//String类型(特殊)
      int age;//基本数据类型
      Birthday birthday;//引用类型
      ...
    }
    main(){
      Person p1 = new Person("beauty", 18, new Birthday(2018, 12, 25));
      Person p2 = person.clone();
      p1.birthday == p2.birthday;//true,birthday属性指向同一内存空间,浅拷贝。 
    }
    
    • 深拷贝:对于有引用类型(除不可变对象的引用(如String)外)的对象,一般考虑深拷贝
    //深拷贝需要覆写 clone方法
    //Person类的clone()方法覆写
    public Object clone(){
          Person p = (Person)super.clone();
          p.setBirthday((Birthday)this.birthday.clone());//属性所属类也需要实现Cloneable接口
          return p;
    }
    //Birthday的clone()方法覆写
    public Object clone(){
      return super.clone();//因为该类中没有引用类型。
    }
    

    关键点

    • 通过clone方法的覆写来实现深拷贝,往往需要类层次结构每个类都实现深拷贝
    • 可以考虑将类设计为不可变对象(如string),来简化深拷贝的实现。
    • 不可变对象设计,可以考虑将内部属性申明为final的方式。

    相关文章

      网友评论

          本文标题:Object类

          本文链接:https://www.haomeiwen.com/subject/owrjlqtx.html