读 effective java 中文版第二版读后感(第四天)
2019-09-27 本文已影响0人
隔壁小新
*第九条 覆盖equals时总是要覆盖hashCode
1.在应用程序执行期间,只要对equals方法的比较操作没有被修改,那么对同一个对象调用多次,hashCode方法都必须如一的返回相同的整数
2.如果两个对象调用equals(Object)方法比较相等,那么调用两个对象任意一个的hashCode方法必须产生同样的整数结果
3.如果两个对象调用equals(Object)方法比较不相等,那么调用任意的一个hashCode方法产生不同的整数结果。
*第十条 始终要覆盖toString方法
心得体会:
1.原因:因为Object的toString()方法给出来的信息太过简单,所以本书中建议你去继承Object的toString()方法,并且重写toString()方法,提供更多的内容信息。
第十一条 谨慎地覆盖clone
拷贝的实现是通过继承Cloneable接口从而允许对象进行克隆操作
1.简言之,所有实现了Cloneable接口的类都应该有一个共有的方法覆盖clone方法。此公有方法首先需要调用super.clone方法,然后修正任何需要修正的域。
例
public class stack{
private Object[] elements;
private int size=0;
@override
public stack clone(){
Stack stack=(Stack)super.clone();//正确复制
stack.elements=elements.clone();//修正域
return result;
}
}
加入修正域的意义是,克隆的对象的elements与原来的对象的引用都指向一个地方,所以需要对elements进行单独的克隆修正
心得体会:
虽然本章节的内容比较多,就我个人的理解,此条需要表达的中心思想是:使我们如何使用克隆方法,其次是让我们了解克隆方法的一个缺陷,就是对于可以修改内容的引用对象,需要去进行一些修正后才能真正的实现clone方法。
第十二条 考虑实现Comparable接口
CompareTo方法并没有在Object类中,需要去继承Comparable接口去实现CompareTo方法 此方法小于,等于,大于分别是-1,0,1.
compareTo继承需要满足的条件是:
1.x.compareTo(y)==y.compareTo(x) 两边都是相等的。
2.传递性:x.compareTo(y)>0 &&y.compareTo(z)>0 暗示着x.compareTo(z)。