java - 为什么在这种情况下会发生拆箱?
问题描述
根据Java 教程,
将包装类型 (Integer) 的对象转换为其对应的原始 (int) 值称为拆箱。Java 编译器在包装类的对象是以下情况时应用拆箱:
- 作为参数传递给需要相应原始类型的值的方法。
- 分配给相应原始类型的变量。
为什么在这种情况下会发生拆箱?
char l = 0;
int arr[] = new int[]{1,2,3};
System.out.println(arr[new Integer(1)]);
在这种情况下,这些事情会发生在哪里?是否有一种底层方法可以控制数组中的元素访问?还是 [] 暗示某种变量?
解决方案
JLS 15, §15.10.3对此非常清楚:
...
索引表达式经历一元数字提升(§5.6)。提升的类型必须是
int
,否则会发生编译时错误。...
类似的段落可以在旧的 JLS 中找到,例如JLS 8, §15.10.3。
推荐阅读
- .htaccess - htaccess 重定向将文本添加到 url
- java - JavaFX tableview 搜索过滤器不起作用,但没有错误?
- c# - 初始期间和最终期间必须包含一个日期,并且不能包含在其他日期中
- linqpad - 显示的消息“正在下载更新...”不会消失
- javascript - Javascript,如何在一定次数的尝试后倒计时并发出警报
- mysql - 想要连接多个具有多个条件的表
- chapel - 将 C 数组指针包装为 Chapel 数组的最佳方法
- c++ - 将参数作为值传递
- aws-lambda - 为什么我的 Alexa ReportStatus 指令响应不起作用?
- ejabberd - ejabberd 命令创建(仅找到 1 个 XMPP)