对于==而言
==对基本数据类型比较的是值
==对引用数据类型比较的是地址
对于equals方法
Object没有重写的equals方法比较的是地址
String重写的equals方法比较的是字符串是否相同
Integer重写了equals方法,比较的是int值是否相同
延申:对于基本数据类型和包装类的==比较(7种)
如果int和Interger进行比较
无论Interger是new还是直接赋一个int值
integer都会自动拆箱
比较的是两者的int值是否相等
Integer i1=128,int i2=128
i1==i2为true,
Integer i1=new Integer(128),int i2=128
i1==i2为true,
如果是使用关键字new
Integer i1=new Integer(2)
Integer i2=new Integer(2)
那么,地址一定是新开辟的
i1==i2比较为false
Integer i1=127,i2=127
i1==i2为true,
因为-128-127是byte的取值范围,在此范围内Integer会直接拆箱,从常量池里面直接获取,在内存里用原生的int基本数据类型,进行值的比较,
如果Integer i1=128,i2=128
i1==i2为false,
但是128不在常量池指定的byte范围,会新建一个对象
如果Integer i1=new Integer(2),i2=2
i1==i2为false,
任何new操作都会创建新的地址
==比较必然为false,但是equals要看方法是否被该包装类重写
如果Integer i1=128,i2=128
i1.equals(i2)为true,
Integer的equals方法进行了重写,比较的是int值