Java中(Integer)127 == (Integer)127和(Integer)129 == (Integer)129表达式
哲理有个大家容易忽视的问题
127就是true 129就是false
java堆堆integer做了缓存,范围是-128~127
129越界,需要去重新分配
我的问题是:为甚么做了缓存就是同一个对象了
在-128~127范围内会自定拆箱,这时会直接从常量池中去取这个数,而在常量池中没有重复,相同的数只存在一个,所以地址一样的
首先 java中直接比较引用数据类型 比较的其实是在堆内存中的地址值 因为底层有-128 到 127 的缓冲区间 所以 如果两个integer类型代表的数值一样的话
那么堆中的地址值也是指向同一个的 这才是缓存存在的意义 所以 缓存了就是同一个对象
JVM会自动缓存-128~127范围内的值,所有在这个范围内的值相等的Integer对象都会共用一块内存,而不会开辟多个;
超出这个范围内的值对应的Integer对象有多少个就开辟多少个内存,这样做是为了节省内存消耗。