2 sonofbaba sonofbaba 于 2017.08.27 21:42 提问

Java中(Integer)127 == (Integer)127和(Integer)129 ==

Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式
哲理有个大家容易忽视的问题
127就是true 129就是false
java堆堆integer做了缓存,范围是-128~127

129越界,需要去重新分配

我的问题是:为甚么做了缓存就是同一个对象了

3个回答

chenbaige
chenbaige   Rxr 2017.08.28 08:59

在-128~127范围内会自定拆箱,这时会直接从常量池中去取这个数,而在常量池中没有重复,相同的数只存在一个,所以地址一样的

q690080900
q690080900   2017.08.28 09:01

首先 java中直接比较引用数据类型 比较的其实是在堆内存中的地址值 因为底层有-128 到 127 的缓冲区间 所以 如果两个integer类型代表的数值一样的话
那么堆中的地址值也是指向同一个的 这才是缓存存在的意义 所以 缓存了就是同一个对象

JSXHMQS
JSXHMQS   2017.08.28 09:40

JVM会自动缓存-128~127范围内的值,所有在这个范围内的值相等的Integer对象都会共用一块内存,而不会开辟多个;
超出这个范围内的值对应的Integer对象有多少个就开辟多少个内存,这样做是为了节省内存消耗。

Csdn user default icon
上传中...
上传图片
插入图片