在java基本类型的比较可以用equals和==两种方式。
大家都知道使用equals,是比较连个对象的引用,==比较的是对象本身,但是有些情况跟我想象的还是有差别的,看下面的例子:
如果按照我们原有的思维,输出的肯定是false,true,其实并不是看输出结果:
在看一个例子,如下:
输出结果为:
在JDK5.0及其以上版本,JVM在启动的时候为基本类型的包装类提供了缓冲池,比如Integer池的大小-128~127
当我们使用一个值时,JVM会先到缓冲池查看是否有相同值得对象,如果有就用现成的,如果没有就重新创建一个。
所以对于Integer来说,-128~127之间的数字是从缓冲池取得,所以这个范围内的值在使用==号比较的时候返回的
是true,因为他们的内存地址是相同的,128这个值超出了缓冲池的范围,是新new出来的,内存地址不一样,所以
返回的是false