• 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]
     
  • 相关阅读:
    #啃underscore源码 一、root对象初始化部分
    LeetCode 7. Reverse Integer (JS)
    LeetCode 1.两数之和(JS)
    【安利】前端基础学习资源
    如何防止XSS攻击?
    浅谈CSRF攻击方式
    node中__dirname、__filename、process.cwd()、process.chdir()表示的路径
    解决Error: ENOENT: no such file or directory, scandir 'xxx ode-sassvendor'
    jquery中attr和prop的区别
    git stash 命令
  • 原文地址:https://www.cnblogs.com/shuaiandjun/p/10017512.html
Copyright © 2020-2023  润新知