专栏首页用代码征服天下java中的自动装箱和拆箱

java中的自动装箱和拆箱

一、什么是自动装箱和拆箱:

我们知道java为8种基本类型分别提供了对应的包装类型,在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:

Integer i=new Integer(10);

而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:

Integer i=10;

这个过程会自动根据数值的类型创建Integer对象,则就是自动装箱,同理

Integer i=10;
int j=i;

上面的代码则是自动拆箱,将Integer对象自动拆箱为int

简单来说装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型转化为基本类型

二、装箱和拆箱是如何实现的:

如下代码:

public class Main {
    public static void main(String[] args) {
         
        Integer i = 10;
        int n = i;
    }
}

反编译后得到如下结果

由反编译的结果可知,装箱的时候调用的是Integer的valueOf方法,拆箱时调用的是Integer的intValue方法

其他的包装器类也类似,这里就不一一举例了

总结:java装箱过程是调用包装类的valueOf方法实现的,而拆箱过程则是调用包装类的xxxValue方法实现的(xxx代表对应的基本类型)

三、面试中相关问题:

下面的这段代码将输出什么:

public class Main {
    public static void main(String[] args) {
         
        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;
         
        System.out.println(i1==i2);
        System.out.println(i3==i4);
    }
}

有人会答true,也有人会答false

正确答案是:

true
false

结果显示i1和i2指向同一个对象,i3和i4指向的是不同的对象

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 聊聊dubbo的DubboComponentScanRegistrar

    本文主要研究一下dubbo的DubboComponentScanRegistrar

    codecraft
  • ASP.NET Core 中的 ServiceProvider

    在 ASP.NET Core 中,微软提供了一套默认的依赖注入实现,该实现对应的包为:Microsoft.Extensions.DependencyInject...

    Edison.Ma
  • servlet中的IllegalStateException

    本文链接:https://blog.csdn.net/u014427391/article/details/97397116

    用户1208223
  • 迭代器模式

    java中的迭代器想必大家都用过,但是大家知道他的性能以及实现原理吗?今天就来介绍一波 实际上foreach封装了迭代器,迭代器又封装了for循环,这样一来,...

    gfu
  • [译]区域设置更改和 AndroidViewModel 反面模式

    在 ViewModel 中,如果要公开来自资源(字符串、可绘制文件、颜色……)的数据,则必须着重考虑 ViewModel 对象而忽视配置更改,例如区域设置更改。...

    Android 开发者
  • QT QJsonObject 与 QJsonArray 中insert()方法 插入值的顺序问题

    本文链接:https://blog.csdn.net/acoolgiser/article/details/99442177

    acoolgiser
  • Redis 与序列化

    序列化只是一种拆装组装对象的规则,那么这种规则肯定也可能有多种多样,比如现在常见的序列化方式有:JDK(不支持跨语言)、JSON、XML、Hessian、Kry...

    业余草
  • 聊聊dubbo的ServiceBeanExportedEvent

    dubbo-2.7.3/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/conf...

    codecraft
  • 聊聊dubbo的ConfigChangeEvent

    dubbo-2.7.3/dubbo-configcenter/dubbo-configcenter-api/src/main/java/org/apache/d...

    codecraft
  • Netty系列之Netty线程模型

    最近发现极客时间的很多课程中,都穿插到了 Netty,可见 Netty 的重要性。基于此,给大家推荐一下这篇文章!

    业余草

扫码关注云+社区

领取腾讯云代金券