前段功夫,我给一位小搭档做在线摹拟口试的光阴,随口问了一句:”说说==和equals办法的差别?“,终于给我答复一个equals办法是对比体例的。
咱们先来讲说==,==对比有两种情状:
1.对比的是根本数据类别
inta=;intb=10;//对比的是两个变量对应的值if(a==b){System.out.println("出题目了");}
2.对比的是引用类别
Integera=Integer.valueOf();Integerb=newInteger();//对比的是a和b指向的目标地方能否雷同if(a==b){System.out.println("出题目了");}
尔后,咱们再来讲说equals办法。
equals办法是在Object中界说的,详细以下:
publicbooleanequals(Objectobj){return(this==obj);}
从这办法里,咱们能得出论断:倘使不誊写equals办法,那末对比的即是两个目标地方。
至于,誊写了,对比的是甚么?
这就比如用饭,在大大都民心中,提到用饭,就会料到吃面或吃米饭。对不起,目前良多人所谓的用饭或许即是只吃菜,并没有吃米饭或面。
底下咱们来讲说,两个罕见类:String类和Integer类。
String类中的equals办法:
publicbooleanequals(ObjectanObject){//先对比目标地方//目标地方是统一个,那证实即是统一个目标if(this==anObject){returntrue;}//对比类别if(anObjectinstanceofString){StringanotherString=(String)anObject;intn=value.length;//对比长度if(n==anotherString.value.length){charv1[]=value;charv2[]=anotherString.value;inti=0;while(n--!=0){//对比体例if(v1!=v2)returnfalse;i++;}returntrue;}}returnfalse;}
从周全办法的源码逻辑,咱们很轻易看出,String类的equals办法也不是必要要对比体例,先是对比两个目标地方,尔后对比长度,在对比详细体例。
Integer类中的equals办法:
publicbooleanequals(Objectobj){//对比类别if(objinstanceofInteger){//先拆箱再对比详细值//提防这边的value是int类别的变量returnvalue==((Integer)obj).intValue();}returnfalse;}归纳
这个口试题,看似很简朴,我反面还能够问了其它两个三年的劳动的友人,答复也是和前方那位友人的同样。底下对此停止一个归纳:
==倘使是用于根本数据类的对比,则对比的是详细值,倘使对比的是引用类别(包装类别),则对比的是两个目标指向的目标地方能否相等。
equals办法,默许不誊写的情状下是对比两个目标的地方能否雷同。倘使自身对equals办法誊写了,那就得看是何如誊写的。
好了,这日就分享到这边,记得