简而言之:
==
当两边是基本数据类型时,比较的是值
当两边是引用类型时,比较的是地址
equals()
基本数据类型不能用equals()比较
引用类型比较时,如果没有重写比较地址值,如果重写了,比较具体属性中的内容
int与Integer之间比较(变量值一样)
-
int与int比较
用==比较,肯定为true
基本数据类型没有equals()方法 -
int与Integer比较
Integer会自动拆箱
==与equals()比较都为true -
int与new Integer比较
Integer会自动拆箱,调用intValue()方法
==与equals()比较都为equals -
Integer与Integer比较
-
直接赋值
==:如果值在[-128~127]之间,为true,不在这个区间为false
(在Integer类的内部提供了⾃动装箱池技术,将-128到127之间的整数已经装箱完毕,当程序中使⽤该范围之间的整数时,⽆需装箱直接取⽤⾃动装箱池中的对象即可,从⽽提⾼效率。)
equals():Integer重写了equals方法,结果为true -
Integer与new Integer
==:new Integer会在堆中创建新对象,为false
equals():true -
new Integer与new Integer
==:不同地址之间,false
equals():true
-