操作对象分为:基本类型与包装类型
1.基本类型:byte,int,long,double,float,boolean,char,short。通常存放在栈
2.包装类型:Byte,Integer,Long,Double,Float,Boolean,Character,Short。存放在堆,但是栈中存放着它的引用
==与equals
==比较的是引用,可以看成是地址
equals比较的是数值,可以看成是地址里的内容
当两个对象的值不相等,无论是基本还是包装类型,无论用==与equals 比较都返回false
当两个对象的值相等时,
分为以下几种情况:
1.数据类型与包装类型用" == “:true
2.数据类型与包装类型用"equals”:true
3.包装类型与包装类型用" equals “:true
4.包装类型与包装类型用” == ":false(特别说明由于jvm缓存的原因,jvm缓存中保存有-128-127的Integer 对象,当创建两个范围在这之间的对象时,第一个对象会自动装包,并把值保存在缓存中,第二个对象装包后,会在缓存中查找,如果该值的存在,则直接指向缓存中的对象,所以两个对象其实可以看成一个对象。)比如如下例子返回的是true
即:
Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1==i2); //打印true