基本数据类型
基本类型 | 字节 | 位数 | 基本类型默认值 | 包装类 | 包装类默认值 | 常量池 | 对象值比较 |
---|---|---|---|---|---|---|---|
byte | 1 | 8 | 0 | Byte | Null | [-128,127] | equals |
short | 2 | 16 | 0 | Short | Null | [-128,127] | equals |
int | 4 | 32 | 0 | Integer | Null | [-128,127] | equals |
long | 8 | 64 | 0L | Long | Null | [-128,127] | equals |
float | 4 | 32 | 0f | Float | Null | 未实现常量池 | |
double | 8 | 64 | 0d | Double | Null | 未实现常量池 | |
char | 2 | 16 | ‘u0000’ | Character | Null | [0,127] | |
boolean | - | 1 | FALSE | Boolean | Null | true/false |
自动装箱: 基本数据类型 转化为 包装类
写法1
Integer num = 9;
写法2
Integer num = Integer.valueOf(9);
自动拆箱:包装类 转化为 基本数据类型
Integer num = 9;
num--;
因为对象不能直接进行运算,类似如上计算时隐含自动拆箱,转化为基本数据类型后才能进行加减乘除
int和Integer有什么区别?
Integer是int的包装类
;int是基本数据类型
;
Integer变量必须实例化
后才能使用;int变量不需要;
Integer实际是对象的引用
,指向此new的Integer对象;int是直接存储数据值
;
Integer的默认值是null
;int的默认值是0
;
Integer可用于泛型
;int不可以;
基本类型和包装类型有什么区别?
包装类型可以为 null
,而基本类型不可以
那为什么 POJO 的属性必须要用包装类型而不用基本类型呢?
《阿里巴巴 Java 开发手册》上有详细的说明, 数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱,就会抛出 NullPointerException 的异常。
包装类型可用于泛型
,而基本类型不可以
泛型使用基本类型时会编译出错。因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类。
基本类型比包装类型更高效
基本类型在
栈
中直接存储的具体数值
,而包装类型则存储的是堆中的引用
。 很显然,相比较于基本类型而言,包装类型需要占用更多的内存空间