关于自动装箱和拆箱

自动装箱:将基本数据类型自动转换为包装类对象。

拆箱:将包装类对象自动转换为基本数据类型。

性能:频繁的装箱和拆箱操作可能影响性能,尤其是在需要高效处理数据时


基本数据类型和包装类型有哪些?

基本数据类型byte, short, int, long, float, double, char, boolean

包装类型Byte, Short, Integer, Long, Float, Double, Character, Boolean


关于拆箱的一些坑

int a = 128;

Integer = 128;

a == interger

image-20240818160434287

别急再看看下面的

image-20240818160459793

flag 一个为true 一个为false 为什么呢

首先int 类型和Integer类型比较时候用 == 会比较值,不会比较其引用地址

然后如果为包装类型比较,如果不存在缓存的地址中,【-128,127】 这是Integer的缓存机制,直接返回缓存的对象,如果超过但是不会发生拆箱,而是构造了一个新对象。因为超过了Integer的常量池。


常量池

字符串常量池 “ ”

整数型常量池:包装类 Short Byte Integer Long进行了缓存处理默认范围为[-128,127];

字符串常量池:Character [0,127]

布尔常量池

  • Boolean 类型的包装类有两个静态常量 Boolean.TRUEBoolean.FALSE,表示 truefalse,这两个对象也是缓存的。
  • 例如:Boolean b1 = true; Boolean b2 = true;b1b2 引用的是同一个对象。

非缓存的常量

  • 浮点类型
    • 对于 FloatDouble 类型的包装类,Java 没有提供缓存机制,因此每次创建 FloatDouble 对象时,都会创建新的对象,即使它们的值相同。
  • 超出缓存范围的整数和字符
    • 对于超出缓存范围的 IntegerShortByteCharacter 对象,Java 也不会缓存。例如,Integer i1 = 128; Integer i2 = 128;i1i2 是不同的对象。

总结

自动装箱和自动拆箱的基本概念就是 基本类型转换到包装类型(装箱)

(拆箱)相反:smile:

:helicopter:最后了解以下常量池,缓存的都是缓存的对象,如果超出则会新建一个新对象,==比较则会返回false。

明白 == 与基本类型比较时候是比较值 内容 而不是引用地址

:baby: