java中的包装类型

java中的包装类型

解释了java中包装类型的特性

 次点击
11 分钟阅读

介绍

Java 中的包装类(Wrapper Class)是为了将基本数据类型转换为对象而存在的。在 Java 中,8个基本数据类型都有对应的包装类。分别为: 分别为:ByteShortIntegerLongFloatDoubleCharacterBoolean

包装类型与基本类型的区别

包装类型可用于泛型,而基本类型不可以。

基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,几乎所有对象实例都存在于堆中。

成员变量包装类型无默认值,初始化为null ,而基本类型有默认值且不是 null。

基本数据类型使用==比较的是值,而对于包装数据类型来说,比较的是对象的内存地址。故不能直接使用==比较两个包装对象的值,而是使用equals方法。

缓存机制

Java 包装类缓存机制指的是,在某些情况下,Java 会对一定范围内的包装类对象进行缓存,以提高性能和节省内存空间。

有缓存的包装类:

  • Byte,Short,Long,[-128, 127] 被缓存

  • Integer:默认缓存 [-128, 127](可通过参数扩大上界)

  • Character,[0,127]被缓存

  • Boolean:只缓存两个对象 TRUE 和 FALSE

Float、Double 没有实现这种缓存机制。

这些包装类一般在使用 valueOf(...) 或自动装箱时触发缓存逻辑:如果值在缓存范围内,直接返回缓存数组中的同一个对象引用。如果超出范围,则 new 一个新对象。

缓存的作用

减少频繁创建相同小整数、常用字符、布尔值对象的开销。提升性能、节省内存,是典型的“用空间换时间”的优化。

装箱,拆箱介绍

装箱/拆箱是基本类型和包装类型之间的相互转换机制,用来在“值类型”和“对象”之间搭桥

装箱会创建对象、拆箱会调用方法,两者都会带来额外的时间和内存开销,在高频场景(尤其是循环中)要尽量避免不必要的装箱拆箱

最后强调

所有整型包装类对象之间值的比较,全部使用 equals 方法比较。

© 本文著作权归作者所有,未经许可不得转载使用。