根据Java教程,
将包装器类型(Integer)的对象转换为其对应的原语(int)值称为取消装箱。当包装类的对象是:
为什么在这种情况下会出现反装箱?
char l = 0;
int arr[] = new int[]{1,2,3};
System.out.println(arr[new Integer(1)]);在这种情况下,这些事情在哪里发生?是否有控制数组中元素访问的基础方法?还是意味着某种变量?
发布于 2020-12-19 17:16:47
JLS 15,第15.10.3节在这个问题上非常清楚:
..。 索引表达式经历一元数值提升(§5.6)。提升的类型必须是
int,否则会发生编译时错误. ..。
类似的段落可以在较早的JLSes中找到,例如JLS 8,第15.10.3节。
发布于 2020-12-19 17:07:50
取消装箱发生在第三行。
System.out.println(arr[new Integer(1)]);arr是第2行声明的数组。
int arr[] = int[]{1, 2, 3};注意,arr的类型是一个“int数组”。所有数组都接受正在访问的索引的int。在第3行中,您要传递一个Integer,这两种类型并不相同。一种是原始类型,另一种是Object类型。由于存在将Integer更改为int的“取消装箱转换”,所以在将值作为索引传递到int数组之前就会取消装箱。
https://stackoverflow.com/questions/65372253
复制相似问题