1、基本概念
字节的单位:byte。位的单位:bit,1byte=8bit
2、8种基本数据类型
4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。
数据类型
浮点型大小(占字节数,2的几次方)
范围
默认值
包装器类型
byte(字节)
8
-128 - 127
0
Byte
shot(短整型)
16
-32768 - 32768
0
Short
int(整型)
32
-2147483648-2147483648
0
Integer
long(长整型)
64
-9233372036854477808-9233372036854477808
0
Long
float(浮点型)
32
-3.40292347E+38-3.40292347E+38
0.0f
Float
double(双精度)
64
-1.79769313486231570E+308-1.79769313486231570E+308
0.0d
Double
char(字符型)
16
‘ \u0000 - u\ffff ’
‘\u0000 ’
Character
boolean(布尔型)
1
true/false
false
Boolean
3、包装类
包装类即使把基本类型变成对象类型,包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
4、包装类转换关系
基本类型 --> 包装器类
Integer obj=new Integer(10);
包装器类 --> 基本类型
int num=obj.intValue();
字符串 --> 包装器类
Integer obj=new Integer("100");
字符串 --> 基本类型
int num=Integer.parseInt("-45.36");
5、自动装包/拆包(Autoboxing/unboxing)
基本类与包装类的转换,则是装包与拆包
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int >> Integer)
自动拆包:包装类自动转为基本类型.(Integer >> int)
int 是基本类型,直接存储数值
Integer是对象类,new一个对象时用一个引用指向这个对象
Java把内存划分成两种:一种是栈内存,另一种是堆内存
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,而实际的对象是在存储堆内存中
比如
int i = 10; ----直接在栈中分配空间
Integer j = new Integr(5); ----对象是在堆内存中,而j(引用变量)是在栈内存中
在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。 因为在堆中分配空间所需的时间远大于从栈中分配存储空间
一.什么是装箱?什么是拆箱?
二.装箱和拆箱是如何实现的
三.面试中相关的问题
一.什么是装箱?什么是拆箱?
在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i =new Integer(10);
而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:
Integer i =10;
这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。
那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:
Integer i =10;//装箱