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. Java:为什么不在这里发生自动装箱?
- 3. 为什么char不能自动装箱到Java中的字符?
- 4. 为什么这种类型的数组包装在jQuery中不起作用?
- 5. 为什么函数在PHP类数组项不起作用
- 6. 为什么编译器/ JVM不能让自动装箱“只是工作”?
- 7. 为什么在Dockerfile中使用RUN安装自定义python包不起作用?
- 8. 为什么'=='在PHP中不起作用?
- 9. 浮动为什么不起作用?
- 10. 浮动不起作用。为什么?
- 11. CSS浮动不起作用?为什么?
- 12. 为什么滚动条不起作用?
- 13. 为什么将自动装箱标记为警告?
- 14. 手动安装python依赖不起作用。为什么?
- 15. 为什么动作查询在访问VBA中不起作用?
- 16. :不起作用,为什么?
- 17. 为什么我的free()包装函数不起作用?
- 18. 为什么click()函数不起作用?
- 19. 为什么VLOOKUP函数不起作用
- 20. 为什么getElementById函数不起作用?
- 21. 为什么printer_list函数不起作用
- 22. .index()函数为什么不起作用?
- 23. 为什么__getattr__函数不起作用?
- 24. 为什么双层数numpy数组的赋值不起作用?
- 25. 这个js数组函数为什么不起作用?
- 26. 为什么addslashes()函数在我的数组在php中不起作用?
- 27. 为什么我的JavaScript音频自动播放不起作用?
- 28. 为什么这个自动填充字段不起作用?
- 29. 为什么自动测试不起作用?
- 30. 为什么自动对焦不起作用?
int是一种原始的..你需要明确地使用整型包装.... –
int不是Object的一个实例。您需要使用整数,而不是 –
此外,还要避免使用这些结构与阵列,如果在所有可能的:使用变量类型等于实际的数组类型,如果你不想得到一个'ArrayStoreException'某处的路线。 –