首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这种情况下会出现反装箱?

为什么在这种情况下会出现反装箱?
EN

Stack Overflow用户
提问于 2020-12-19 16:58:27
回答 2查看 101关注 0票数 2

根据Java教程

将包装器类型(Integer)的对象转换为其对应的原语(int)值称为取消装箱。当包装类的对象是:

  • 作为参数传递给期望对应原语类型的值的方法.
  • 分配给相应的原语类型的变量.

为什么在这种情况下会出现反装箱?

代码语言:javascript
复制
char l = 0;
int arr[] = new int[]{1,2,3};
System.out.println(arr[new Integer(1)]);

在这种情况下,这些事情在哪里发生?是否有控制数组中元素访问的基础方法?还是意味着某种变量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-19 17:16:47

JLS 15,第15.10.3节在这个问题上非常清楚:

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

类似的段落可以在较早的JLSes中找到,例如JLS 8,第15.10.3节

票数 4
EN

Stack Overflow用户

发布于 2020-12-19 17:07:50

取消装箱发生在第三行。

代码语言:javascript
复制
System.out.println(arr[new Integer(1)]);

arr是第2行声明的数组。

代码语言:javascript
复制
int arr[] = int[]{1, 2, 3};

注意,arr的类型是一个“int数组”。所有数组都接受正在访问的索引的int。在第3行中,您要传递一个Integer,这两种类型并不相同。一种是原始类型,另一种是Object类型。由于存在将Integer更改为int的“取消装箱转换”,所以在将值作为索引传递到int数组之前就会取消装箱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65372253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档