Java设计当初就提供了8种基本数据类型及对应的8种包装数据类型。我们知道Java是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。
下面是基本数据类型与对应的包装类型。
下面是包装类型的继承结构图。
从以上图表可以对基本类型和包装类型有一个全面的了解。
1.集合类泛型只能是包装类;
//编译报错
Listlist1=newArrayList<>();
//正常
Listlist2=newArrayList<>();
2.成员变量不能有默认值;
privateintstatus;
基本数据类型的成员变量都有默认值,如以上代码status默认值为0,如果定义中0代表失败,那样就会有问题,这样只能使用包装类Integer,它的默认值为null,所以就不会有默认值影响。
3.方法参数允许定义空值;
privatestaticvoidtest1(intstatus){
System.out.println(status);
}
看以上代码,方法参数定义的是基本数据类型int,所以必须得传一个数字过来,不能传null,很多场合我们希望是能传递null的,所以这种场合用包装类比较合适。
还有更多应用场景就不一一例举了,欢迎留言共同探讨包装类的更多的应用场景。
Java5增加了自动装箱、拆箱机制,提供基本数据类型和包装类型的相互转换操作。
自动装箱
自动装箱即自动将基本数据类型转换成包装类型,在Java5之前,要将基本数据类型转换成包装类型只能这样做,看下面的代码。
Integeri1=newInteger(8);
Integeri2=Integer.valueOf(8);
//自动装箱
Integeri3=8;
以上3种都可以进行转换,但在Java5之前第3种方法是编译失败的,第3种方法也正是现在的自动装箱功能。另外,第一种构造器方法也不推荐使用了,已经标为废弃了。
其实自动装箱的原理就是调用包装类的valueOf方法,如第2个方法中的Integer.valueOf方法。
自动拆箱
自动拆箱即自动将包装类型转换成基本数据类型,与自动装箱相反,有装就有拆,很好理解。
//自动拆箱
inti4=i3;
inti5=i3.intValue();
继续上面的例子,把i3赋值给i4就是实现的自动拆箱功能,自动装箱的原理就是调用包装类的xxValue方法,如i5中的Integer的intValue方法。
自动装箱、拆箱不只是体现在以上的例子,在方法接收参数、对象设置参数时都能自动装箱拆箱。
需要注意的是,关于Integer,-128~127会有缓存,对比这个范围的值的对象是一个坑,这个在阿里巴巴规范中也有提及。
以上就是极悦java培训机构的小编针对“夯实基础:Java数据类型的包装类”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习