关于自动装箱和拆箱
关于自动装箱和拆箱
苏泽自动装箱:将基本数据类型自动转换为包装类对象。
拆箱:将包装类对象自动转换为基本数据类型。
性能:频繁的装箱和拆箱操作可能影响性能,尤其是在需要高效处理数据时
基本数据类型和包装类型有哪些?
基本数据类型:byte, short, int, long, float, double, char, boolean
包装类型:Byte, Short, Integer, Long, Float, Double, Character, Boolean
关于拆箱的一些坑
int a = 128;
Integer = 128;
a == interger
别急再看看下面的
flag 一个为true 一个为false 为什么呢
首先int 类型和Integer类型比较时候用 == 会比较值,不会比较其引用地址
然后如果为包装类型比较,如果不存在缓存的地址中,【-128,127】 这是Integer的缓存机制,直接返回缓存的对象,如果超过但是不会发生拆箱,而是构造了一个新对象。因为超过了Integer的常量池。
常量池
字符串常量池 “ ”
整数型常量池:包装类 Short Byte Integer Long进行了缓存处理默认范围为[-128,127];
字符串常量池:Character [0,127]
布尔常量池:
Boolean类型的包装类有两个静态常量Boolean.TRUE和Boolean.FALSE,表示true和false,这两个对象也是缓存的。- 例如:
Boolean b1 = true; Boolean b2 = true;,b1和b2引用的是同一个对象。
非缓存的常量
- 浮点类型:
- 对于
Float和Double类型的包装类,Java 没有提供缓存机制,因此每次创建Float或Double对象时,都会创建新的对象,即使它们的值相同。
- 对于
- 超出缓存范围的整数和字符:
- 对于超出缓存范围的
Integer、Short、Byte、Character对象,Java 也不会缓存。例如,Integer i1 = 128; Integer i2 = 128;,i1和i2是不同的对象。
- 对于超出缓存范围的
总结
自动装箱和自动拆箱的基本概念就是 基本类型转换到包装类型(装箱)
(拆箱)相反:smile:
:helicopter:最后了解以下常量池,缓存的都是缓存的对象,如果超出则会新建一个新对象,==比较则会返回false。
明白 == 与基本类型比较时候是比较值 内容 而不是引用地址
:baby:
评论
匿名评论隐私政策





