java中基本类型与包装类型的关系

本文详细介绍了Java中的基本数据类型及其8种类型,包装类的必要性,以及自动装箱和拆箱机制。强调了包装类在方法参数声明中的优势,以及基本类型与引用类型在内存存储上的区别。
摘要由CSDN通过智能技术生成

1、基本数据类型

Java中有4类、共8种基本类型的数据:

分类类型字节数默认值范围
整数型byte10-128~127
short20-2^15~2^15-1
int40-2^31~2^31-1
long80-2^32-2^63-1
浮点型float40.0f-2^31~2^31-1
double80.0-2^63~2^63-1
布尔型boolean-00,1
字符型char2\u0000|空格|00~2^16-1

注意:没有String,String是引用类型。

其中,boolean的大小没有明确规定,在单独使用boolean时,通常JVM默认在编译后使用int数据类型来进行存储,可以提高执行效率。而如果使用了boolean[]等形式的数组,则使用byte类型来进行存储,具体需要看jvm虚拟机是否按照这种规范。

2、包装类

Java是一种面向对象的语言,绝大部分时间开发者都在对对象进行操作,而基本数据类型并不属于对象,因此需要对基本数据类型进行包装,八大基本类型的包装类分别为:Byte、Short、Integer、Long、Float、Double、Char、Boolean,大致上与基本数据类型命名方式相同,以Integer为例,包装类中指明了该类型数据的最大、最小值,用MAX_VALUE与MIN_VALUE来表示,同时也会提供一些便捷的数值操作方法,如将十进制转为十六进制的方法:Integer.toHexString(int i)、十进制转二进制的Integer.toBinaryString(int i)等。

在日常使用中我们经常用以下方式进行初始化:

Integer i = 1;

显然i是一个对象,但1是基本数据类型,为什么可以成功赋值呢?这里涉及到了Java的自动装箱机制,这段代码编译后实际执行的是:

Integer i = Integer.valueOf(1);

这句代码才是Integer对象实际的初始化方式,但日常开发中我们直接使用第一种方式即可,此外还有其他初始化方式:

Integer j = new Integer(1);
Integer k = new Integer("1");

类似的,Java还有自动拆箱机制,比如以下代码:

//自动装箱
Integer i = 1;
//自动拆箱,实际调用的是int l = i.intValue();
int l = i;

在日常开发中,如方法的参数列表中声明的是int或Integer,实际调用传另一种类型也可以,此处就是自动装箱与拆箱的应用。

3、其他

基本数据类型与其包装类还存在一些其他的差异,如基本数据一般保存在栈中,而包装类(即引用类型数据)保存在堆中,在栈中通过一个引用来指向包装类的实例对象,此处不作过深探讨。

日常开发中,推荐尽量使用包装类进行方法的接收参数声明,因为包装类的默认值都是null,即引用类型数据为空,由此可以判断传参是否存在错误,而使用基本数据类型时,由于默认值是0,难以判断传参是否发生错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值