java基本类型与包装类型之间的关系

基本数据类型

Java中有八种内置的基本数据类型,分别是byte、short、int、long、float、double、char和boolean类型。其中

基本数据类型所占字节数
byte     1个字节
short2个字节
int4个字节
long8个字节
float4个字节
double8个字节
char2个字节
boolean视情况而定,可能是1个字节,也可能是4个字节

注意,字节数可能会因为不同的JVM而有所不同。

注意,使用Oracle Jdk的时候,当boolean类型单独使用时:

boolean b = true;

此时b是占4个字节的。这是由于在JVM编译中,它被当作int类型进行了处理,所有占4个字节

当boolean以数组形式存在时,此时是占一个字节,同样是在JVM编译中,被当作成byte类型处理。

这八个基本数据类型,都有对应的包装类:

基本数据类型包装类型
btyeByte
short       Short
int       Integer
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

基本数据类型转换为对应的包装类

//int类型转换为Integer类型
int i = 100;
Integer integer = new Integer(i);

//double类型转换为Double类型
double d = 15.0;
Double doubleObject = new Double(d);

//boolean类型转换为Boolean类型
boolean b = true;
Boolean booleanObject = new Boolean(b);

//byte类型转换为Byte类型
byte bt = 1;
Byte byteObject = new Byte(bt);

//short类型转换为Short类型
short s = 10;
Short shortObject = new Short(s);

//long类型转换为Long类型
long l = 100000L;
Long longObject = new Long(l);

//类型转换为Float类型
float f = 10.0f;
Float floatObject = new Float(f);

//char类型转换为Character类型
char c = 'a';
Character characterObject = new Character(c);

对应包装类转换为基本数据类型

//int类型转换为Integer类型
int i = 100;
Integer integer = Integer.valueOf(i);

//double类型转换为Double类型
double d = 15.0;
Double doubleObject = Double.valueOf(d);

//boolean类型转换为Boolean类型
boolean b = true;
Boolean booleanObject = Boolean.valueOf(b);

//byte类型转换为Byte类型
byte bt = 1;
Byte byteObject = Byte.valueOf(bt);

//short类型转换为Short类型
short s = 10;
Short shortObject = Short.valueOf(s);

//long类型转换为Long类型
long l = 100000L;
Long longObject = Long.valueOf(l);

//float类型转换为Float类型
float f = 10.0f;
Float floatObject = Float.valueOf(f);

//char类型转换为Character类型
char c = 'a';
Character characterObject = Character.valueOf(c);

 除此之外,从Java5开始添加了自动装箱和自动拆箱,可以自动将基本数据类型转换为对应的包装类或者反过来:

//自动装箱
Integer integer = 100;
Double doubleObject = 15.0;
Boolean booleanObject = true;
Byte byteObject = 1;
Short shortObject = 10;
Long longObject = 100000L;
Float floatObject = 10.0f;
Character characterObject = 'a';
//自动拆箱
Integer integer = 100;
int i = integer; 

自动拆箱虽然很好用,但是有些情况会带来一些问题:

1.空指针异常

当你的包装类的对象为null时,进行自动拆箱的时候就会抛出空指针异常

2.数值比较问题

对于包装类型的对象,拿int和Integer来进行说明,不能简单的使用==进行比较。因为对于-128到127之间的整数,Java会使用缓存的对象,所以==可以正确比较这个范围内的数值。但是,对于这个范围之外的数值,Java会创建新的对象,所以==比较的是对象的引用,而不是数值。

 

装箱和拆箱操作

自动装箱,相当于Java编译器替我们执行了 Integer.valueOf(XXX);

自动拆箱,相当于Java编译器替我们执行了Integer.intValue(XXX);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值