Byte、 Boolean 、Integer、Long、Short、Character缓存

Java中的包装类型(ByteShortIntegerLong、Float、Double、CharacterBoolean)都提供了常量池缓存机制,即对于某些范围内的数值,每次创建新的包装对象时并不会新建对象,而是从缓存中获取已有的对象引用。其中,ByteShortIntegerLong默认对[-128,127]之间的数值进行缓存,其他类型默认不缓存。这样做的好处是可以节省内存开销,提高程序的性能。 例如,当我们使用以下方式创建Integer对象时,实际上并不会创建新的对象,而是从常量池中获取已有的对象引用: ``` Integer i1 = 10; // 自动装箱,相当于 Integer i1 = Integer.valueOf(10); Integer i2 = 10; // 自动装箱,相当于 Integer i2 = Integer.valueOf(10); System.out.println(i1 == i2); // true,因为 i1 和 i2 引用同一个对象 ``` 但是,当创建的数值超出了缓存范围时,就会创建新的对象,例如: ``` Integer i3 = 128; // 自动装箱,相当于 Integer i3 = Integer.valueOf(128); Integer i4 = 128; // 自动装箱,相当于 Integer i4 = Integer.valueOf(128); System.out.println(i3 == i4); // false,因为 i3 和 i4 引用不同的对象 ``` 需要注意的是,虽然使用包装类型的缓存机制可以提高程序的性能,但是在某些特殊情况下,也可能会导致程序出错。例如,如果使用包装类型进行比较时,应该使用 equals() 方法进行比较,而不是使用“==”运算符进行比较。因为使用“==”运算符进行比较时,如果两个对象引用的不是同一个对象,就会返回 false,而不是根据对象的值进行比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值