例如:爲什麼這個說法long[] n= new long[];
是錯的,但是這個說法 long[][] n= new long[1][];
是對的?內存如何知道在第二條語句中需要分配多少內存給對象?爲什麼我們需要在創建一維數組對象時定義數組長度?
9
A
回答
9
內存如何知道在第二條語句中需要分配多少內存給對象?
兩件事情要記住要弄清楚這是怎麼回事:
- 2D Java數組不是方形的,他們是數組的數組。
- 指定數組在創建時的大小。
所以在這個例子中,你要創建一個long數組(長度爲1)來保存另一個long數組 - 但你還沒有創建第二個數組(因此你不需要指定)實際上,第一個陣列爲內部陣列提供了一個空的「槽」(或者如果外部陣列長於1,則爲槽),但是內部陣列(或多個)避難所尚未創建,因此它們的大小不需要指定。
它不只是創建一個任意長度的數組,它根本不會創建任何內部數組。
您可以或許看到更清楚,如果您嘗試訪問或存儲的二維數組長:
long[][] x = new long[2][];
x[0][0] = 7;
...會產生NullPointerException
(第二行),因爲有是沒有內部陣列可以訪問。
在第一個沒有編譯的例子中,你試圖實際創建一個long數組,但沒有給它一個維數,因此是錯誤。
2
當你寫這篇文章 - long[][] n= new long[1][];
要創建陣列陣列long
,但你實際上並不初始化那些陣列現在
所以,如果你n[0] == null
將返回true
這樣你就可以自由地在任何時間點初始化新的數組later-
n[0] = new long[10];
所以問題是 - 你需要提供的尺寸,同時初始化您的數組,這就是爲什麼long[] n= new long[];
是錯誤的
相關問題
- 1. 爲什麼我們需要遍歷二維數組中列的行長度
- 2. 爲什麼我們在傳遞動態二維數組時不需要列數?
- 3. 創建未定義長度的c#對象數組?
- 4. 我們爲什麼要加()當我們創建一個空數組
- 5. 爲什麼我們需要創建模擬對象?
- 6. 創建一個自定義對象數組的數組
- 7. 創建一個可變長度數組需要幫助
- 8. 爲什麼我們需要在創建對象時額外添加'get'和'set'?
- 9. 爲什麼我們需要在MongoDB中定義數據模型
- 10. 創建具有特定長度和寬度的二維數組
- 11. 從數組創建自定義對象
- 12. 爲什麼我們需要一個臨時對象?
- 13. 存儲對象數組或在需要時創建?
- 14. 我們爲什麼需要纖維
- 15. 如何在php中創建固定長度的多維數組?
- 16. 創建一個數組對象數組?
- 17. 爲什麼我的對象需要很長時間才能創建?
- 18. 爲什麼我們需要長型?
- 19. 爲什麼JS需要對象/數組存在
- 20. 爲什麼我們需要在C#中鎖定和對象?
- 21. 爲什麼我們在返回render()時需要「請求」對象?
- 22. 爲什麼我們需要「-'0'」來修改數組?
- 23. 爲什麼使用布爾數組需要更長的時間?
- 24. 爲什麼我需要'新'來創建一個對象?
- 25. 爲什麼我不需要創建一個對象?
- 26. 未定義數組長度
- 27. 需要時動態創建子對象和數組
- 28. 需要幫助在C#中創建一個二維數組#
- 29. 如何創建從給定的二維數組一維數組
- 30. 對象創建並將它們放入二維數組
簡單但很好的問題! –