美文网首页工作生活
JAVA基本类型与包装类使用与比较

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

作者: 一个忙来无聊的人 | 来源:发表于2019-07-04 19:34 被阅读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" 之间相等比较会正确,超过这个范围比较是否相等会失败

    相关文章

      网友评论

        本文标题:JAVA基本类型与包装类使用与比较

        本文链接:https://www.haomeiwen.com/subject/oxnrhctx.html