工作生活

JAVA基本类型与包装类使用与比较

2019-07-04  本文已影响0人  一个忙来无聊的人

一、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" 之间相等比较会正确,超过这个范围比较是否相等会失败

上一篇下一篇

猜你喜欢

热点阅读