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); }

 

 posted on 2020-03-20 00:23  いつも何度でも  阅读(156)  评论(0编辑  收藏  举报