目录(本文基于JDK1.8)
- 1. Java中的基本数据类型和包装类型是什么?
- 2. 自动拆箱和装箱的定义是什么?
- 3. 为什么需要自动拆箱和装箱?
- 4.自动拆箱和装箱是如何实现的?
- 4. 什么时候会发生到自动拆箱和装箱?
- 5.自动拆装箱需要注意的地方
1. Java中的基本数据类型和包装类型是什么?
基本数据类型 | 包装类型 |
---|---|
int(4字节) | Integer |
short(2字节) | Short |
byte(1字节) | Byte |
long(8字节) | Long |
float(4字节) | Float |
double(8字节) | Double |
char(2字节) | Character |
boolean(未定) | Boolean |
2. 自动拆箱和装箱的定义是什么?
- 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。
//装箱
Integer i = 10;
//拆箱
int n = i;
3. 为什么需要自动拆箱和装箱?
JDK1.5
以下,是不能直接地向集合(Collections
)中放入原始类型值,因为集合只接收对象,我们需要将这些原始类型的值转换成对象,然后将这些转换的对象放入集合中。在JDK1.5
开始引入了自动拆箱、装箱,目的是将原始类型值转自动地转换成对应的对象。
//在Java 5之前,只能这样做
Integer value = new Integer(1);
//或者这样做
Integer value = Integer.valueOf(1);
//直接赋值是错误的
//Integer value = 1;
4.自动拆箱和装箱是如何实现的?
下面我们看一个小例子,并把它反编译一下查看结果。(以前我们提到过java中的编译和反编译)
/**
* @author Y
*/
public class TestPackaging {
public static void main(String[] args) {
Integer i = 10;
int n = i;
}
}
/*
* 通过 CFR 0_132反编译.
*/
package com.demo;
public class TestPackaging {
public static void main(String[] arrstring) {
Integer n = Integer.valueOf((int)10);
int n2 = n.intValue();
}
}