Object类方法解析

Object类方法解析备注:复习java基础,仅作学习笔记用

Object类方法解析hashcode()和equals()

public native int hashCode();

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

1.1作用

两者都是为了比较对象是否相等

1.2区别

  • 性能:hashcode()默认本地方法实现,是对象在内存中的地址的数字化表现,将内存地址转换为某串hash值;equals方法如果是重写了往往是针对对象属性比较,比较复杂,所以从性能或效率角度上看,hashcode()效率高于equals();
  • 可靠性:由于hashcode()计算公式的问题,可能导致不同的对象生成的hashcode()一致,而equals则是比较全面,所以我们能得出:equals相等的两个对象其hashcode()一定相等,但hashcode()相同的两个对象equals不一定相等。所以从可靠性角度上看,equals()可靠性高于hashcode();

1.3注意事项

  • 考虑性能问题,由于hashcode()性能优于equals(),所以在需要大量比对时会优先选hashcode()判断,如果hashcode()不相同,则两对象一定不相等,如果hashcode()相同,再用equals()比较,保证效率和正确性;
  • 当使用HashMap/Hashtable/HashSet等容器时,要求Map的key或Set的对象不能重复,它们内部的比较也是通过先比较hashcode(),hashcode()相同再比较equals(),所以对于Map的key或Set的对象,必须要重写hashcode()和equals();

引申阅读:重写equals方法和hashcode方法那些事

Object类方法解析getClass()

通过getClass()获取获取Class对象,利用Class对象操作反射获取对象、对象属性及方法

protected native Object clone() throws CloneNotSupportedException;

反射相关知识:Java反射知识

Object类方法解析clone()

用于创建对象并返回对象拷贝,属于浅拷贝,可通过super.clone()或实现Cloneable接口来调用clone()

引申阅读:java中的深浅拷贝

 

 

上一篇:Java常用API(五)—— 重写对象的equals和hashCode方法


下一篇:第一次考试出错题equals和hashcode