3
A
回答
3
拳击原始类型的实例转换为相应的包装器类型的实例。它不适用于数组类型。
为什么?
- 因为这就是语言设计者设计Java的方式,以及JLS指定的内容。详情请见JLS 5.1.7。
JLS的作者没有包括这个决定的解释。但是,有很多原因。这里有几个更明显的。
效率。将
int[]
转换为Object[]
需要访问并转换数组的所有元素。这是昂贵的(O(N))...而不是程序员隐藏在语法后面的东西。拳击数组必然创建一个新的数组,它本质上与原始数组不同。您将能够在下面讲这个:
int[] ints = new int[]{1,2,3}; Integer[] arr = ints; // hypothetical boxing of the elements // What does ints.equals(arr) return? array[1] = 0; // What does ints[0] contain now?
相比之下,(真正的)拳击,如果你比较指针是唯一的区别的值之间拆箱转换......即使如此,不可靠。
底线是,延长装箱和拆箱会引入效率和概念性问题,很难解决。
5
从this答案Why do we use autoboxing and unboxing in Java?,我会引用要回答你的问题的相关细节:
原始变量没有以同样的方式互换,既不 对方,也不要用
Object
。 这个 (但不是唯一的原因)的最明显的原因是它们的尺寸差异。这使得 原始类型在这方面不方便,但我们仍然需要它们在语言(主要归结为性能的原因) 。
因此在另一方面,我应该为你工作是:
Object[] arr = new Integer[3];
1
数组是在Java中一个对象作为每JLS 4.3.1
所以,一个不能分配INT []为Object [],或者反之亦然,因为他们是不兼容的类型。
虽然,自动装箱做工作,为数组的元素:
int[] a = new int[3];
a[0] = new Integer(0);
a[1] = 1;
a[2] = new Integer(2);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
输出:
0
1
2
相关问题
- 1. 为什么自动装箱/取消装箱在这里失败?
- 2. 为什么自动装配弹簧储存库不起作用?
- 3. 为什么自动装配不起作用?
- 4. 为什么char不能自动装箱到Java中的字符?
- 5. Java:为什么不在这里发生自动装箱?
- 6. 为什么设置箱形阴影在Chrome中不起作用?
- 7. 为什么这种类型的数组包装在jQuery中不起作用?
- 8. 为什么Java不支持强制和自动装箱?
- 9. 为什么组件不起作用?
- 10. 为什么在使用Arrays.sort()时自动装箱不允许用于原始数组?
- 11. 为什么函数在PHP类数组项不起作用
- 12. 为什么编译器/ JVM不能让自动装箱“只是工作”?
- 13. 自动装箱在通用,可以自动装箱工作与对象
- 14. 为什么'=='在PHP中不起作用?
- 15. 为什么将自动装箱标记为警告?
- 16. 为什么滚动条不起作用?
- 17. 为什么动态SQL不起作用
- 18. 为什么CSS动画不起作用
- 19. 为什么UIView动画不起作用
- 20. 浮动为什么不起作用?
- 21. CSS浮动不起作用?为什么?
- 22. 浮动不起作用。为什么?
- 23. 手动安装python依赖不起作用。为什么?
- 24. 为什么动作查询在访问VBA中不起作用?
- 25. 使用writeToFile:自动:连续不起作用...为什么?
- 26. :不起作用,为什么?
- 27. 为什么动画不透明在铬中不起作用?
- 28. 为什么lines.map不起作用,但spark.take.map在Spark中起作用?
- 29. 为什么我的free()包装函数不起作用?
- 30. 函数不起作用 - 为什么?
int是一种原始的..你需要明确地使用整型包装.... –
int不是Object的一个实例。您需要使用整数,而不是 –
此外,还要避免使用这些结构与阵列,如果在所有可能的:使用变量类型等于实际的数组类型,如果你不想得到一个'ArrayStoreException'某处的路线。 –