zoukankan      html  css  js  c++  java
  • java 1.5 自动拆箱和装箱的注意事项

    背景

    java1.5后引入了自动装箱和自动拆箱的概念

    自动拆箱:将引用类型转化为基本数据类型

    自动装箱:将基本数据类型装为引用类型

    但是实际使用中,什么情况自动拆箱什么情况自动装箱呢?

    自动装箱

    Integer i = 100;   (调用Integer.valueOf(100))  
    这里存在一个缓存变量 -128~127 ,如果基本数据类型在此范围内,则使用缓存的对象,否则new Integer(number)
    idea里面通过配置设置缓存最大值【-server  -XX:AutoBoxCacheMax=300】,如果配置的小于127,系统会使用127

    自动拆箱

    //第一种情况
    Integer i = 100; 
    int x = i;   (调用 i.initValue(100))
    //第二种情况
    Integer  i = 100;
    int x = 100;
    System.out.println(i == 100)

    自动填坑

    ---------1-----------    
    Integer a = 100;    
    Integer b = 100;
    a == b   //结果是true  
    ----------2----------  
    Integer a = 200;
    Integer b = 200;
    a == b   //结果是false    包装类型的比较,用equals()
    -----------3---------
    Integer a = 200;
    int b = 200;
    a == b   //结果是true  【自动拆箱】 initValue()
    -----------4---------
    Integer a = 200;
    int b = 200;
    a.equals(b)   //结果是true  值的比较
    ------------5--------
    Long  a = 200;
    int b = 200;
    a.equals(b)   //结果是false   通过源码可以分析,如果类型不同一定为false

    ------------6--------
    int a1 = Integer.MAX_VALUE +1;   //结果是 -2147483648  通过原反补进行计算可得
    int a2 = 222222222222222222222222; //报错,与上面对比可得上面是先计算,在赋值
    ------------7--------
    Long a = 128L;
    Long b = 128L;
    System.out.println(a == b); //false 内置 [-128,127] 并且不能通过系统设置
    ---------其它缓存--------
    Short s ;  [-128,127]
    Byte s1 ; [-128,127]
    Character s5 ; [0,127]
     
  • 相关阅读:
    结对编程之附加题:单元测试
    机器学习第二次作业
    第一次作业
    机器学习第二次作业
    机器学习第一次个人作业
    软工实践个人总结
    第08组 Beta版本演示
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
    第08组 Beta冲刺(3/5)
  • 原文地址:https://www.cnblogs.com/shuaiandjun/p/10017512.html
Copyright © 2011-2022 走看看