equals() 判断两个对象是否等价。
对于任何非空对象与null判断,返回值都是false。
如果有明确字符串做比较时,双引号字符串放前面避免空指针异常。
然后字符串判空,基本操作先不等于null,判断length。(根据需要使用apache 的 commons jar 包的isEmpty()和isBlank()系列)
hashCode() 返回对象哈希码值(不是太清楚)
两个对象等价,哈希码值一定相同
两个对象哈希码值相同,不一定等价
clone() 创建并返回对象副本。
是Object的Protected方法,如果一个类不去显示重写clone,其他类就无法通过实例调用该方法。
另外重写clone方法之后,该类未实现Cloneable接口,会抛出CloneNotSupportedException。
clone方法并不是Cloneable接口方法,知识Cloneable规定要实现接口才能调clone,不然会抛出异常。
要注意的是对象如果是多层,对象里面有层list,clone只是将list引用地址拷贝到另外一个,所以称之为浅拷贝。
一般有两种解决方式实现深拷贝
1.在重写的TestClass类里面重写clone,自己去写该类的拷贝替换(一般不推荐这种,需要实现接口,以及有异常抛出等问题)
2.直接在构造方法里进行深拷贝替换
//这个还是要根据自己的对象去实现
public TestClass(TestClass testClass){ this.setName(testClass.getName()); this.setSum(testClass.getSum()); List<String> copyList = new ArrayList<>(); if(testClass.getStringList()!=null&&!testClass.getStringList().isEmpty()){ copyList.addAll(testClass.getStringList());//这个需要注意,调用的System.arraycopy()方法实现复制,也是需要看是属性值还是对象引用 } this.setStringList(copyList); }
如果随笔有啥错误,请有时间的大佬评论指出。本菜鸡会及时学习进行更改。