为什么整型包装类对象值用 equals 方法比较

在阅读《阿里巴巴Java开发手册》时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下:

【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。说明:对于Integervar=?在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

Integer 缓存问题分析

public class IntegerTest {
	public static void main(String[] args) {
	    Integer a = 100, b = 100, c = 666, d = 666;
	    System.out.println(a == b);
	    System.out.println(c == d);
	}
}

通过运行代码可以得到答案,程序输出的结果分别为: true , false。
那么为什么答案是这样?

结合《阿里巴巴Java开发手册》的描述很多人可能会回答:因为缓存了 -128 到 127 之间的数值,就没有然后了。

那么为什么会缓存这一段区间的数值?缓存的区间可以修改吗?其它的包装类型有没有类似缓存?

接下来,让我们一起进行分析。欲知后事如何,点击此链接
转载于:https://my.oschina.net/u/4232045/blog/3123544?_from=gitee_rec#comments

你可能感兴趣的:(java,java)