备注:复习java基础,仅作学习笔记用
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();
getClass()
通过getClass()获取获取Class对象,利用Class对象操作反射获取对象、对象属性及方法
protected native Object clone() throws CloneNotSupportedException;
反射相关知识:Java反射知识
clone()
用于创建对象并返回对象拷贝,属于浅拷贝,可通过super.clone()或实现Cloneable接口来调用clone()
引申阅读:java中的深浅拷贝