Java虚拟机为了优化8中基本数据类型的包装对象,为他们提供了缓冲池,缓冲池的大小为一个字节。(8个bit位,长度为2^8位,范围是-128~127)。超过缓冲池的范围,包装类对象就自己在缓冲池外面赋值。如果对象的值在缓冲池范围内,就指向缓冲池的值,缓冲池里面的值是共享的。
代码示例:
package day02;
public class Lianxi6 {
publicstatic void main(String[] args) {
Integeri1 = new Integer(127);
Integeri2 = new Integer(127);
System.out.println(i1== i2);//false 双等号比较的是地址,因为i1和i2是new了一个对象,那么他们的地址肯定不一样。
Integeri3 = 127;
Integeri4 = 127;
System.out.println(i3== i4);//true i3和i4对象的int类型值都是127,没有超出缓冲池范围,所以他们都指向缓冲池的同一个值,所以这两个地址相等。
Integeri5 = 128;
Integeri6 = 128;
System.out.println(i5== i6);//false 因为i5和i6的int类型值是128,超过了缓冲池的范围,所以i5和i6就自己创建自己的地址,所以地址就不一样。
}
}