首先是==( 判断地址 前提:引用数据类型 ):
运行结果:
是不是很奇怪。。
一、为什么可以这样写?(Integer a = 3;)
在JDK1.5之后支持了自动打包和解包
20是int型,存入的基本类型会经过自动封装为引用类型,变成Integer,但是你自己定义的类该new还得new啊,,这里只是说基本类型。
二、为什么明明是两个对象,a == b而c!=d呢?
在-128~127的Integer值并且以Integer x = value的方式赋值的Integer值在进行==和equals比较时,都会返回true,因为Java里面对处在在-128~127之间的Integer值,用的是原生数据类型int,这255个地址空间会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128~127的范围,进行==比较时是进行地址及数值比较。
而写的 Integer i = new Integer(10);说明我要new一个新的,就不会和之前的重用了
下面是equals(判断地址内的值 前提:引用数据类型):
结果:
都相等,因为指向地址内存的值相等。