JAVA基本类型与包装类使用与比较
一、Java对象大小
1.1、基本数据类型 固定的占比,如下
包装类型 | 基本类型 | 数据类型 | 字节 | 默认值 | 取值范围 |
---|---|---|---|---|---|
Byte | byte | 字节型 | 1 | 0 | -2^7 ~ 2^7-1 |
Short | short | 短整型 | 2 | 0 | -2^15 ~ 2^15-1 |
Integer | int | 整型 | 4 | 0 | -2^31 ~ 2^31-1 |
Long | long | 长整型 | 8 | 0 | -2^63 ~ 2^63-1 |
Float | float | 单精度浮点型 | 4 | 0.0F | 3.4E-38 ~ 3.4E+38 |
Double | double | 双精度浮点型 | 8 | 0.0D | 1.7E-38 ~ 1.7E+38 |
Character | char | 字符型 | 2 | 0 | 0~65535 |
Boolean | boolean | 布尔型 | 1 | FALSE | true,false |
1.2、非基本类型大小占用
一个空Object对象在堆中的大小是8byte 实际占用大小 8byte(堆) + 4byte(栈 对象的引用)
Object ob = new Object();
因为Java对象大小是8的整数倍 -- 一个基本类型包装类的大小至少是16byte
二、基本类型与包装类型选择
由于基本类型最大所占字节为8字节 (long类型和double类型) ,包装类型大小至少是 16 字节,所以包装类型所占用的内存空间至少是基本类型的N倍 (2=<N<=16),实际应用中尽量选择基本类型
三、包装类型的实际使用
包装类型多用于类型转换
如下样例
long ll = 123;
int i = (int)ll;
int j = new Long(ll).intValue();
int k = Integer.parseInt(String.valuesOf(ll))
四、包装类型比较
包装类型之间比较: 需要先判空,再进行比较
如 Integer a,b
if (a == null && b == null){
return true;
}else if (a == null || b == null){
return false;
}else{
return a.equals(b);
}
--注意
1、包装类型equals比较 当 Integer a = 1; Integer b = null; 时,使用 a.equals(b) 会报NumberFormatException异常
若 a 和 b 同时为String 时,使用 equals 判断是否相等,只需要判断前不为空即可,也就是常说的确定值放 equals 前。 例如:使用 “a”.equals(demo) 而不是demo.equals("a"); -- demo 为一个字段名称
2、包装类型 == 比较
如果你的编译器比较智能,他会提示你应该使用 “equals” 进行比较
image.png
如果你编译器没有提示--那就是直接运行了哦
当任意一个数值为空运行的时候-会给你NumberFormatException异常
当两个包装类值不是 通过new 方式创建, 如Integer 范围在 " -128" -- "127"之间,== 判断会正确,
当包装类通过new 关键字创建,或者如 Integer比较 范围在" -128" -- "127" 外,判断的返回永远都会是false
public static void main(String[] args) {
Integer a = new Integer(null);
Integer b = new Integer(null);
if (a == b){
System.out.println("0");
}
}
Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:542)
at java.lang.Integer.<init>(Integer.java:867)
at com.lxzl.risk.system.business.creditcustomerlog.logic.impl.CreditCustomerLogLogicImpl.main(CreditCustomerLogLogicImpl.java:93)
同理 其他基本数据类型的包装类比较范围 在 "-128" -- "127" 之间相等比较会正确,超过这个范围比较是否相等会失败