Comparable和Cloneable

目录

一、 引用数据类型比较用equals方法

 二、接口的补充

 三、JDK的克隆接口


一、 引用数据类型比较用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的时候恰好属性值也是张三。

四、相关代码

任枭雄/rocket_class_Grammer - Gitee.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值