封箱及拆箱
字节(byte),位(bit),1 byte = 8 bit。
基本数据类型
基本数据类型 | 位数 | 取值范围(包装类型中有明确) | 默认值 | 包装类型 |
---|---|---|---|---|
byte(字节型) | 8 | -128~127 | 0 | Byte |
short(短整型) | 16 | -32768~32767 | 0 | Short |
int(整型) | 32 | 0x80000000 ~ 0x7fffffff | 0 | Integer |
long(长整型) | 64 | 0x8000000000000000L ~ 0x7fffffffffffffffL | 0L | Long |
float(单精度浮点型) | 32 | 0x1.0p-126f ~ 0x1.fffffeP+127f | 0.0f | Float |
double(双精度浮点型) | 64 | 0x1.0p-1022 ~ 0x1.fffffffffffffP+1023 | 0.0d | Double |
char(字符型) | 16 | ‘\u0000’ ~ ‘\uFFFF’ | ‘\u0000’ | Character |
boolean(布尔型) | 1 | true/false | false | Boolean |
只有基本数据类型在作为成员变量时才有默认值,其他情况(如:作为局部变量)会提示变量未初始化。
包装类型
包装类即使把基本类型变成对象类型,包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
类型转换
-
byte、Byte互转
byte转Byte :
Byte a = new Byte((byte) 0)
Byte b = Byte.valueOf((byte) 0)
Byte转byte :
byte c = b.byteValue()
-
short、Short互转
short转Short :
Short a = new Short((short) 0)
Short b = Short.valueOf((short) 0)
Short转short :
short c = b.shortValue()
-
int、Integer互转
int转Integer :
Integer a = new Integer(0)
Integer b = Integer.valueOf(0)
Integer转int :
int c = b.intValue()
-
long、Long互转
long转Long :
Long a = new Long(0L)
Long b = Long.valueOf(0L)
Long转long :
long c = b.longValue()
-
float、Float互转
float转Float :
Float a = new Float(0f)
Float b = Float.valueOf(0f)
Float转float :
float c = b.floatValue()
-
double、Double互转
double转Double :
Double a = new Double(0d)
Double b = Double.valueOf(0d)
Double转double :
double c = b.doubleValue()
-
char、Character互转
char转Character :
Character a = new Character('\u0000')
Character b = Character.valueOf('\u0000')
Character 转char :
char c = b.charValue()
-
boolean、Boolean互转
boolean转Boolean :
Boolean a = new Boolean(false)
Boolean b = Boolean.valueOf(false)
Boolean转boolean :
boolean c = b.booleanValue()
自动封箱及自动拆箱
基本类型转包装类型称为封箱;包装类型转基本类型称为拆箱。
而自动封箱及自动拆箱则是指封箱及拆箱的动作不是由我们显示完成,程序会为我们进行,以int和Integer为例,其他类型情况类似。
//自动装箱,通过反编译可以看到调用的是valueOf方法,相当于Integer i = Integer.valueOf(10)
Integer i = 10;
//自动拆箱,通过反编译可以看到调用的是intValue方法,相当于int a = Integer.intValue(i)
int a = i;
自动装箱调用的是valueOf方法,而不是调用构造方法创建对象,可能是因为valueOf方法有cache(除了单精度浮点型、双精度浮点型,两者在一定范围内,数组个数无限,无法事先创建用数组存放;布尔型也没有cache,因为就只有两种取值),只要是cache范围内的就不需要额外创建对象。