Primitive type(值类型):int,long,float…
用a==b判断值是否相等,逻辑上就是一个值
Object(引用类型): Integer,Long,Float,String…
用a==b判断的不是值是否相等,而是判断是否为同一个Object
用a.equals(b),或Object.equsls(a,b)来判断值是否相等
注意:a.equals(b)要判断a是否为null,为null的话,会抛出nullpointerexeception
为每个类写equals函数就可以用自己的逻辑去判断他们是否相等
Boxing and Unboxing(一些需要注意的细节)
Integer a = 2;//Boxing
意思是:把2装进箱子里,箱子是Integer类型,由a来指向
Integer b = new Integer(2)//Boxing
生成一个Integer类型的箱子,箱子装的值是2,b指向该箱子
int v = a.intValue();//Unboxing
意思是:把a指向的箱子的值取出
懂得上面的一些细节,就能清楚搞明白下面一些容易混淆的知识点(所以原理很重要)
new Integer(2)== 2;//(true)java会自动Boxing、Unboxing
new Integer(2)==new Integer(2);//(false)分别新建一个箱子
Integer.valueOf(2) == Integer.valueOf(2);//(true/false)
如果IntegerCache.low<=i<=IntegerCache.high,返回的是系统已经生成的的东西,否则会new 一个箱子出来,则返回false。箱子里面的值是传入的数,此处是2, IntegerCache.low和IntegerCache.high的值由系统决定
Integer.valueOf(2).invalue()==2;//(true)
New Integer(2).equals(new Integer);//(true)equals函数就是判断值是否相等,如图