自动装箱与拆箱了解吗?原理是什么?

最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:“ Tom聊架构 ”, 回复暗号:“ 578”即可获取

什么是自动拆装箱?

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型;

举例:

Integer i = 10;  //装箱
int n = i;   //拆箱

上面这两行代码对应的字节码为:

   L1

    LINENUMBER 8 L1

    ALOAD 0

    BIPUSH 10

    INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;

    PUTFIELD AutoBoxTest.i : Ljava/lang/Integer;

   L2

    LINENUMBER 9 L2

    ALOAD 0

    ALOAD 0

    GETFIELD AutoBoxTest.i : Ljava/lang/Integer;

    INVOKEVIRTUAL java/lang/Integer.intValue ()I

    PUTFIELD AutoBoxTest.n : I

    RETURN

从字节码中,我们发现装箱其实就是调用了 包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法。

因此,

  • Integer i = 10 等价于 Integer i = Integer.valueOf(10)
  • int n = i 等价于 int n = i.intValue();

注意:如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。

private static long sum() {
    // 应该使用 long 而不是 Long
    Long sum = 0L;
    for (long i = 0; i <= Integer.MAX_VALUE; i++)
        sum += i;
    return sum;
}

相关推荐

  1. 自动装箱了解原理什么

    2024-01-22 03:30:01       60 阅读
  2. C#装箱怎么回事

    2024-01-22 03:30:01       30 阅读
  3. Unity 委托事件、装箱

    2024-01-22 03:30:01       31 阅读
  4. 装箱, 包装类的缓存机制

    2024-01-22 03:30:01       29 阅读
  5. 装箱(js的问题)

    2024-01-22 03:30:01       55 阅读
  6. C#面:简述装箱

    2024-01-22 03:30:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-22 03:30:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-22 03:30:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-22 03:30:01       82 阅读
  4. Python语言-面向对象

    2024-01-22 03:30:01       91 阅读

热门阅读

  1. 【C++】结构体

    2024-01-22 03:30:01       51 阅读
  2. JUC并发编程与源码分析学习笔记(二)

    2024-01-22 03:30:01       56 阅读
  3. Vue2:使用pubsub-js实现组件间通信

    2024-01-22 03:30:01       52 阅读
  4. Ubuntu防火墙管理

    2024-01-22 03:30:01       53 阅读
  5. GraphQL语法用于模式验证和代码生成的新方法

    2024-01-22 03:30:01       56 阅读
  6. 独孤思维:做副业,家人不理解怎么办?

    2024-01-22 03:30:01       51 阅读
  7. 开发安全之:System Information Leak: External

    2024-01-22 03:30:01       52 阅读