Java基本数据的拆、装箱操作(unboxing&autoboxing)

  • Post author:
  • Post category:java


1 实例

(1)演示基本拆装箱操作的程序AutoUnbox.java

public class AutoUnbox {
	public static void main(String[] args){
		Integer data11=new Integer(10);//int类型转换为对象
		Integer data12=new Integer(10);
		Integer data21=Integer.valueOf(10);//int类型转换成对象
		Integer data22=Integer.valueOf(10);
		Integer data31=20;//自动装箱方式实现int转换成对象
		Integer data32=20;
		int sum1=data11+20;//自动拆箱实现对象转换成int
		int sum2=data31+20;
		//输出sum1和sum2
		System.out.println("sum1的值是"+sum1);
		System.out.println("sum2的值是"+sum2);
		//查看是否引用同一对象
		System.out.println("data11和data12是否是同一对象"+(data11==data12));
		System.out.println("data21和data22是否是同一对象"+(data21==data22));
		System.out.println("data31和data32是否是同一对象"+(data31==data32));
	}
}

运行结果:

sum1的值是30
sum2的值是40
data11和data12是否是同一对象false
data21和data22是否是同一对象true
data31和data32是否是同一对象true

(2)修改AutoUnbox.java类中数值大小

NumberTest.java

public class NumberTest {
	public static void main(String[] args){
		//int类型转换为对象
		Integer data21=Integer.valueOf(127);
		Integer data22=Integer.valueOf(127);
		Integer data211=Integer.valueOf(128);
		Integer data221=Integer.valueOf(128);
		//创建Integer类型对象
		Integer data31=-128;
		Integer data32=-128;
		Integer data311=-129;
		Integer data321=-129;		
		//查看是否引用同一对象
		System.out.println("data21和data22是否是同一对象"+(data21==data22));
		System.out.println("data211和data221是否是同一对象"+(data211==data221));
		System.out.println("data31和data32是否是同一对象"+(data31==data32));
		System.out.println("data31和data32是否是同一对象"+(data311==data321));
	}
}

运行结果:

data21和data22是否是同一对象true
data211和data221是否是同一对象false
data31和data32是否是同一对象true
data31和data32是否是同一对象false

2 实例说明

(1)AutoUnbox.java中将int基本数据类型转换为Integer对象可以通过三种方式实现:新建Integer类(new Integer())、Integer类的valueOf方法(Integer.valueOf())和自动装箱操作(Integer data31=20);

(2)int sum1=data11+20实现对象data11与基本数据类型int类型20相加。首先将对象data11自动转换成int即所谓的拆箱操作,然后才能实现与20相加。

(3)AutoUnbox.java中对象data11与data12之所以不是引用同一个对象时因为这两个对象都是通过new来创建。但是data21与data22是通过Integer.valueOf()方法返回同一个数值的引用。data31和data32通过自动装箱操作返回同一个数值的引用。

(4)NumberTest.java中演示了如果数值介于基本数据类型之间,则相应对象会引用同一个类型;否则相反。如int范围-128~127,超出则在Integer装箱时候就不会引用同一个对象。

3 基本数据的拆、装箱操作说明

(1)目的是为了解决基本数据类型和相应的对象之间的转换问题。



版权声明:本文为fasfewatgerjhytsjy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。