先说结论:
1、== 永远是用来比较内存中的地址的。
2、基本类型 与包装类型 使用 == 比较,包装类型会拆箱
3、两个包装类型不能使用 == 比较
4、两个包装类型使用equals比较,先比较类型,再比较值
5、包装类型与基本类型使用equals比较,先将基本类型装箱再比较
论点4验证:
论点2验证:
可以看到,对于Long l =129L; 先进行装箱,对于l ==i1,因为i1是基本类型,对l进行拆箱。
论点5验证:
论点3验证:
论点1验证:
常量(基本数据类型和字符串类型),了解到java虚拟机可知道,会存储在常量池,且基本数据类型包装类都是final类型,不可变更。直接使用 == 其实也可以理解为比较常量的地址。
对于基本数据类型在传参时,其实也是传句柄(handle),但因为传的是final类型,故赋值时,不会改变之前的值。