hashcode
默认对象在内存中的存储地址
用来配合hashSet 等集合框架,put的时候,快速判断不存在用的,hashcode一样再比equal。(小心:equal一样的对象一定要有一样的hashcode,可以使用equal中的相关属性的hashcode,否则hashMap分分钟给你空指针)
equal
比一样的值的。比如你和我一样是P6,但是你的P6是你的P6,不是一个,但是值是一样的。
复用集合时重要方法,覆盖equal时一定要覆盖hashcode不然集合框架就不工作了。
==
比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
toString
默认返回 类+hashcode。一定要覆盖toString,反馈对象的属性,他只在调试和日志中其诊断作用,反馈更多的内容,方便api使用者诊断问题。在单元测试中也起重要作用!
public String toString() {
return MoreObjects.toStringHelper(this).omitNullValues()
.add("name", name)
.add("sex", sex)
.toString();
}
clone
忽略这个方法,自己在外部自己写 T copy(T)的逻辑来替代clone。这个clone方法危险,分分钟出故障
comparable
考虑实现comparable接口,他的compareTo方法,还有大小关系,是eqaul的很好的补充