目录
一、 引用数据类型比较用equals方法
java中引用数据类型之间的相等比较使用equals方法,此时使用“==”是在比较地址值
使用Object类中的equals方法,就是在比较这两个属性的地址
此时想要比较两个student类的属性值是否相等,就需要按照比较规规则重写equals方法
对于关键字instanceof的解释:
①当有继承关系时才可以使用instanceof,是java中的一个保留关键字,左边是对象右边是类,当左边的对象时右边类或者该类的子类创建的实例对象时,返回true,否则返回false。
②需要用到对象的强制类型转换时,需要用到instanceof进行判断
提问:为什么重写时会用到向下转型?
obj时一个Object类型,但是它指向了Student对象,我们要比较的是Student类中的name和score值是否相等,很显然在Object中就不存在这两个属性,所以就需要向下转型把obj还原成Student类型才可以进行比较。
Person per=new China();
per是指向China对象的Person类型,如果需要用到China独有的属性或者方法,就需要把per还原成China类型。
二、接口的补充
当一个场景既可以使用抽象类又可以使用接口定义时,优先考虑使用接口(更灵活)
java.lang.comparable接口,表示该类具备了可比较的能力。
对于一个对象数组来说,假如直接进行使用Arrays.sort(per);此时就会出错,要想让Preson这个类型具备比较能力,也就是让JDK知道Person对象谁大谁小,就需要让Person类实现Compareable接口,重写抽象方法conpareTo。
对于此处的返回值int的解释:
①当>0时,表示当前对象this>传入对象
②当=0时,表示当前对象this=传入对象
③当<0时,表示当前对象this<传入对象
当Arrays.sort调用了重写后的compareTo方法后,就可以对Person对象进行比较了。
所以为啥比较完就可以进行排序了呢,因为Arrays.sort()方法的内部实际上就是根据Comparable的compareTo方法的返回值进行比较的,我们也可以自己写一个排序来实现。
三、JDK的克隆接口
要让一个类具备可复制的能力,实现Cloneable接口,重写clone方法
类似Cloneable这种接口称为标记接口,这个接口本身内部没有任何抽象方法,只有打上了这个标记的子类才具备克隆的能力。JVM在运行时会检查所有实现了Cloneable接口的子类,赋予其克隆的能力,并且clone方法是有Object提供的方法。
此时可以看出来,animal2是通过animal1克隆出来的,但是他们的地址是不一样的。
那么animal3和animal1有啥关系吗,是不是也属于克隆?
不是,animal1和animal3没有任何关系,只是产生animal3的时候恰好属性值也是张三。