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'某處的路線。 –