以Integer为例 辨析JAVA中的自动装拆箱操作 Auto Box/Unbox

老铁,你确定你懂JAVA的Auto Box / Unbox吗? 那么先来做几个小题

public class Autobox_Test {

    public static void main(String[] args) {

        Integer c = 3;
        Integer d = 3;
        Integer e = 365;
        Integer f = 365;
        Integer g=730;
        Long h = 365L;


        System.out.println(c==d);
        System.out.println(e==f);
        System.out.println(g==(e+f));
        System.out.println(g.equals(e+f));
        System.out.println(g.equals(f+h));

    }

}

Emmm,下面是答案来了

  如果你有疑问,那么看到这篇文章算是你捡到宝了,全部做对的,我也佩服你基础十分扎实。下面开始正题:

第一个 c==d 不解释。但是对于第二个 e==f 为false可能有一部分同学不明白。这里false的原因在于 == 左右俩个操作数都是包装器类型的引用时(包装器类型引用: 如 基本数据类型int 其有包装器类型Integer),则是比较其是否为同一个对象,而JAVA的Integer缓存着-127~127,所以产生了 c==d 为true 而e==f 却为false。关于第三个 g==(e+f),此时由于 == 的右侧为算数运算,则会自动拆箱( e.intvalue()+f.intvalue() ),比较两侧的数值,相等则为true。关于第四个g.equals(e+f),e+f先自动拆箱计算,又由于equals,再次将其自动装箱Integer.valueof(),所以为true。关于第五个,和上面的类似,只不过系统自动装箱Long.valueof(),导致两者类型不同false。  若老铁不太明白,下面讲述自动装箱和拆箱。

Integer i=1;

int j=i; 

这是一个Auto Box/Unbox 的典型例子。在第一句中JVM为我们自动执行了 Integer i=Integer.valueof(1);实现了自动装箱的一个过程。第二句则是 int j=i.intvalue();实现了自动拆箱的一个过程,这下要清晰不少吧。明白了这些自动装箱,拆箱,和我们日后写代码调优有不少好处。

相关重要函数:

 1.Integer.valueof(parameter) 将parameter当入参数 返回一个Integer对象。

 2.Integer.parseint(parameter将parameter当参数 返回一个int对象。

 3. Integer.valueof(parameter).intvalue() 将parameter当参数 返回一个int对象。

文章中可能有错误之处,还请老铁指出,谢谢。

   
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值