Java 中基本数据类型与包装类型有
基本类型 | 包装器类型 |
boolean | Boolean |
char | Character |
int | Integer |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
存在基本类型对应包装类的原因:
基本数据类型存方在栈中, 效率更高
new 出来的对象存在于堆中 (通过栈中的引用来使用这些对象), 是一个对象, 因此具有更多的诸如 "转换" 的方法
包装类型的意义
Java 是一个面相对象的编程语言, 基本类型并不具有对象的性质, 为了让基本类型也具有对象的特征, 就出现了包装类型 (如我们在使用集合类型 Collection 时就一定要使用包装类型而非基本类型), 它相当于将基本类型 "包装起来", 使得它具有了对象的性质, 并且为其添加了属性和方法, 丰富了基本类型的操作.
另外, 当需要往 ArrayList,HashMap 中放东西时, 像 int,double 这种基本类型是放不进去的, 因为容器都是装 object 的, 这是就需要这些基本类型的包装器类了.
基本类型和包装类转换:
以 int 和 Integer 为例 (Java5 前):
1.int 转 Integer
- int i = 0;
- Integer ii = new Integer(i);
2.Integer 转 int
- Integer ii = new Integer(0);
- int i = ii.intValue();
基本类型和包装类的区别:
1. 声明方式不同:
基本类型不使用 new 关键字, 而包装类型需要使用 new 关键字来在堆中分配存储空间;
2. 存储方式及位置不同:
基本类型是直接将变量值存储在栈中, 而包装类型是将对象放在堆中, 然后通过引用来使用;
3. 初始值不同:
基本类型的初始值如 int 为 0,boolean 为 false, 而包装类型的初始值为 null;'
4. 使用方式不同:
基本类型直接赋值直接使用就好, 而包装类型在集合如 Collection,Map 时会使用到.
自动装箱和拆箱
在 Java SE5 之前, 如果要生成一个数值为 10 的 Integer 对象, 必须这样进行:
Integer i = new Integer(10);
而在从 Java SE5 开始就提供了自动装箱的特性, 如果要生成一个数值为 10 的 Integer 对象, 只需要这样就可以了:
Integer i = 10;
这个过程中会自动根据数值创建对应的 Integer 对象, 这就是装箱.
那什么是拆箱呢? 顾名思义, 跟装箱对应, 就是自动将包装器类型转换为基本数据类型:
- Integer i = 10; // 装箱
- int n = i; // 拆箱
装箱就是 自动将基本数据类型转换为包装器类型; 拆箱就是 自动将包装器类型转换为基本数据类型.
来源: http://www.bubuko.com/infodetail-2806881.html