java java面向对象-装箱和拆箱操作,java面向对象装箱
java java面向对象-装箱和拆箱操作,java面向对象装箱
20180322 java java面向对象-装箱和拆箱操作
java中的8大包装类:
---------------------------------
基本数据类型 | 包装类 |
----------------|---------------|
byte | Byte |
----------------|---------------|
short | Short |
----------------|---------------|
int | Integer |
----------------|---------------|
long | Long |
----------------|---------------|
char | Character |
----------------|---------------|
float | Float |
----------------|---------------|
double | Double |
----------------|---------------|
boolean | Boolean |
---------------------------------
8大基本数据类型的包装类都是使用final修饰的,即都是最终类,只能被使用,不能被继承(即不能有子类)。
名词解释:
装箱操作:把一个基本数据类型的值转换成对应的包装类对象;
拆箱操作:把包装类对象转换成对应的基本数据类型的值。
下面演示包装类,这里仅仅演示Integer包装类,例子为装箱和拆箱的操作
public class IntegerDemo
{
public static void main(String[] args)
{
int num1 = 1;
int num2 = 2;
integer i1 = new Integer(num1);//装箱操作的一种写法(方式1)
integer i2 = Integer.ValueOf(num1);//装箱操作的另外一种写法(方式2)
int i3 = i1.intValue();//拆箱操作,此时i3为 1
System.out.println(i1);//此时输出 1,本来应该打印出一个hashCode,
//这里却打印出一个值,因为Integer类
//覆盖了Object类的toString()方法
System.out.println(i2);//此时输出 2,理由同上
System.out.println(i3);//此时输出 1
}
}
在java的集合框架中,只能存储对象,不能存储基本数据类型值。意味着每次存储到集合中的基本数据都要手动装箱,这样很麻烦。
Sun公司从java5开始提供了自动装箱和自动装箱的功能。
名词解释:
自动装箱操作:可以直接把一个基本数据类型的值赋值给对应的包装类对象;
自动拆箱操作:可以直接把包装类对象赋值给对应的基本数据类型的值。
//自动拆箱,自动装箱
public class IntegerDemo
{
public static void main(String[] args)
{
Ingteger num1 = 16;//自动装箱
int num2 = num1;//自动拆箱
System.out.println(num1);//此时输出 16
System.out.println(num2);//此时输出 16
}
}
编译前:
integer num1 = 16;
编译后:
Integer integer2 = Integer.valueOf(16);
int j = integer2.intValue();
分析 自动拆箱和自动装箱的编译前和编译后的代码可知,自动拆箱和自动装箱也是一个语法糖,即自动拆箱和自动装箱是编译器级别的新特性,目的是让开发人员更方便的拆箱和装箱(在底层依然是手动装箱和拆箱操作)。但装箱操作使用的是 Integer.valueOf()操作,而不是直接new Integer。
switch之前支持的数据类型是byte、int、short、char,现在也支持了对应的包装类。
eg:
public class IntegerDemo
{
public static void main(String[] args)
{
Ingteger num1 = 16;
swich(num1)
{
case 1:break;
case 2:break;
}
}
}
而编译后,
swich(num1)
{
case 1:break;
case 2:break;
}
变成了
swich(integer3.intValue())
{
case 1: // '\001'
case 2: // '\002'
default:
return;
}
说明switch在处理 包装类时,也使用了语法糖。
下面看这个语句:
Object object = 16;
这句话是正确的,因为实际上上述语句隐含执行了两个语句,即:
语句1:自动装箱,integer i = 16;
语句2:引用类型的自动转换,把子类对象赋给父类变量(小类型赋给父类),即 Object object = i;
所以得出的结论是:Object可以接受一切类型的值。
推导出的结论是:Object数组( Object[] )可以装一切类型的数据,eg:
Object[] i = {12,"ABC",16.25,true};
相关文章
- 暂无相关文章
用户点评