首页 > 解决方案 > 为什么在这种情况下会发生拆箱?

问题描述

根据Java 教程

将包装类型 (Integer) 的对象转换为其对应的原始 (int) 值称为拆箱。Java 编译器在包装类的对象是以下情况时应用拆箱:

  • 作为参数传递给需要相应原始类型的值的方法。
  • 分配给相应原始类型的变量。

为什么在这种情况下会发生拆箱?

char l = 0;
int arr[] = new int[]{1,2,3};
System.out.println(arr[new Integer(1)]);

在这种情况下,这些事情会发生在哪里?是否有一种底层方法可以控制数组中的元素访问?还是 [] 暗示某种变量?

标签: javaarraysindexingjlsunboxing

解决方案


JLS 15, §15.10.3对此非常清楚:

...

索引表达式经历一元数字提升(§5.6)。提升的类型必须是int,否则会发生编译时错误。

...

类似的段落可以在旧的 JLS 中找到,例如JLS 8, §15.10.3


推荐阅读