2025年包装类基础数据类型java

包装类基础数据类型java包装类 在 Java5 中添加了两个新特性 那就是自动装箱和拆箱 因为基本类型的广泛使用 但是 Java 又是面向对象的语言 所以提供了包装类型的支持 我们知道基本数据类型包括 byte short int long float double char boolean 对应的包装类分别是 Byte Short

大家好,我是讯享网,很高兴认识大家。



包装类

在Java5 中添加了两个新特性,那就是自动装箱和拆箱,因为基本类型的广泛使用,但是Java 又是面向对象的语言,所以提供了包装类型的支持

我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long, Float, Double, Character, Boolean。关于基本数据类型的介绍可参考八大基本数据类型

在这一节里我们主要以Integer和int 进行讲解,其他的可以类比

那么为什么需要包装类

JAVA是面向对象的语言,很多类和方法中的参数都需使用对象(例如集合),但基本数据类型却不是面向对象的,这就造成了很多不便

如:List<int> = new ArrayList<>();,就无法编译通过

为了解决该问题,我们引入了包装类,顾名思义,就是将基本类型“包装起来“,使其具备对象的性质,包括可以添加属性和方法,位于java.lang包下。

拆箱与装箱

既然有了基本数据类型和包装类,就必然存在它们之间的转换,如:

 
讯享网 

将基本数据类型转化为对应类型的包装类的过程叫“装箱”;将包装类转为对应类包装类基础数据类型java型的基本数据类型的过程叫“拆箱

在上面中给变量a赋值的时候就发生了装箱,而在参与计算的过程中就发生了拆箱,但是我们好像什么都没做,这句是自动拆装箱

下面我们再给一个例子

装箱

讯享网

拆箱

 

自动拆箱与自动装箱

Java为了简便拆箱与装箱的操作,提供了自动拆装箱的功能,这极大地方便了程序员们。那么到底是如何实现的呢?。这个特性是在java5中引入的

上面的例子就是一个自动拆箱与装箱的过程,通过反编译工具我们得到,

讯享网

我们不难发现,主要调用了两个方法,Integer.intValue() 和 Integer.valueOf( int i) 方法

查看Integer源码,我们找到了对应代码:

 

很明显,我们我们得出,Java帮你隐藏了内部细节。拆箱的过程就是通过Integer 实体调用intValue()方法;装箱的过程就是调用了 Integer.valueOf(int i) 方法,帮你直接new了一个Integer对象

什么时候进行自动拆装箱?

其实很简单(就是在需要对象的时候就装箱需要基本类型的时候就拆箱)

1.添加到集合中时,进行自动装箱

2.涉及到运算的时候,“加,减,乘, 除” 以及 “比较 equals,compareTo”,进行自动拆箱

例如下面这一段代码,则发生了自动装箱

 

注意的点

在上述的代码中,关于Integer valueOf(int i)方法中有IntegerCache类,在自动装箱的过程中有个条件判断

 

结合注释

This method will always cache values in the range -128 to 127, inclusive, and may cache other values outside of this range

大意是:该方法总是缓存-128 到 127之间的值,同时针对超出这个范围的值也是可能缓存的。

那么为什么可能缓存?其实在IntegerCache源码中可以得到答案

 

因为缓存最大值是可以配置的。这样设计有一定好处,我们可以根据应用程序的实际情况灵活地调整来提高性能。

但是这里有问题需要注意,就是从上面代码的逻辑我们可看出,我们只能设置high而不能设置low,还有就是如果high 小于127 将不能生效,其中的low的下限是最开始的时候就固定死了的 final int low = -128;而其中的high虽然是设置了final int的,但是最初的时候,是还没有赋值的;所以我们可以通过设置 java
-Djava.lang.Integer.IntegerCache.high = xxxx Aclass.class 或者 -XX:AutoBoxCacheMax=xxxx

接下来我们通过一段代码进行验证一下,首先我们看一下代码,当运行之后我们可以设置参数-XX:AutoBoxCacheMax=1000 再运行一次

 

因为缓存设置的实1000,也就是在[-128,1000] 之间的就缓存了,也验证了我们上面的说法是正确的

与之类似的缓存还有:

Byte与ByteCache,缓存值范围-128到127,固定不可配置(其实就是全部缓存了)

Short与ShortCache,缓存值范围-128到127,固定不可配置

Long与LongCache,缓存值范围-128到127,固定不可配置

Character与CharacterCache,缓存值范围0到127,固定不可配置

包装类型与switch


                    
小讯
上一篇 2024-12-29 07:10
下一篇 2025-01-01 19:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2173.html