Java包装类,基本的装箱与拆箱
我的博客
何为包装类
将原始类型和包装类分开以保持简单。当需要一个适合像面向对象编程的类型时就需要包装类。当希望数据类型变得简单时就使用原始类型。
原始类型不能为null
,但包装类可以为null
。包装类可用于实现多态性。
通俗的说,为啥要这个东西的存在呢?
首先,我们要知道,Java语言优势就是在于JVM的跨平台机制与面向对象语言的这两大优势。
Java是一个面向对象的编程语言,但是却有一个小小的不足,Java中的八种基本数据类型却是不面向对象的。
那既然不面向对象,就写一个类让这些类型面向对象,于是包装类诞生了。
在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。
包装类
为了方便记忆,除了Integer
和Character
类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可。
对应如下
boolean —> Boolean
char —> Character
byte —> Byte
short —> Short
long —> Long
int —> Integer
float —> Float
double —> Double
如何装箱
public class Demo1 {
public static void main(String[] args) {
int a = 20;
Integer i = Integer.valueOf(a);
Integer j = a;
System.out.println(a + " " + i + " " + j);
}
}
首先,我们先定义一个对象,我们这里是int
类型,那我们就直接使用了Integer i
,定义了一个对象i
,然后我们使用Integer
类中的valueOf()
方法将基本的int
类型a
转换成了对象i
。
此时,这个i
是一个对象,携带的int
值为20
。
但是,我们看看,给出的代码中还有一段,Integer j = a
,是不是疑惑为什么他没有用valueOf()
方法?
这是因为JDK自从1.5版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。
所以,他其实用了这个方法,只是你看不见罢了,我们称之为自动装箱。
输出的值也都一样。这里为了显示自动装箱,所以才去定义了valueOf()
。
如何拆箱
public class WrapperExample2 {
public static void main(String args[]) {
Integer a = new Integer(3);
int i = a.intValue();
int j = a;
System.out.println(a + " " + i + " " + j);
}
}
拆箱就不多说,使用对象调用intValue()
方法即可。
同时他也支持自动拆箱。
演示
public class Demo1 {
public static void main(String[] args) {
int a = 20;
Integer i = Integer.valueOf(a);
Integer j = a;
System.out.println("装箱"+i);
System.out.println("自动装箱"+j);
//对上面的j进行拆箱
int x = j.intValue();
int y = j;
System.out.println("拆箱"+i);
System.out.println("自动拆箱"+j);
}
}
运行结果如下:
自动装箱和拆箱与手动没有区别,我们自然平常选择自动啦!