簡體   English   中英

任何類型的 Java 數組在文件中實際上是什么樣的?

[英]What does a Java array of any type actually look like in file?

我正在了解 Java arrays 並且我讀到了一些類似 Java ZA3CCBC4F9D0CE2F2CD1955 個對象的內容。 這是否意味着當我創建一個數組時,比如int[] array = new int[10] ,底層機制實際上只是一個 class 文件,它使用 10 個 int 類型的實例變量創建,我可以使用 array[(0 -9)]? 如果是這樣,它是如何做到的以及它是如何工作的? 以它的方式聲明 arrays 的語法的概念原因(如果有的話)是什么(所以我可以更容易地記住語法規則)?

這是我在我正在學習的教科書中讀到的:

創建和訪問 Arrays

在 Java 中,數組是 object 的一種特殊類型,但將數組視為相同類型變量的集合通常更有用。 例如,可以按如下方式創建由七個 double 類型變量的集合組成的數組:

 double[] temperature = new double[7];

這就像將以下七個奇怪命名的變量聲明為 double 類型:

 temperature[0], temperature[1], temperature[2], temperature[3], temperature[4], temperature[5], temperature[6]

在分配數組的代碼中:

int myInts = new int[20];

JVM 將在堆中分配一個大小為 integer(4 字節)大小 20 倍的塊。 使用索引偏移乘以原始 object 大小(在本例中也是 4 個字節)訪問/索引數組

另外,我相信數組索引直接內置在 Java 字節碼中。

- - 編輯 - -

關於內置數組索引:如果你看這里,你可以確認 aaload JBC 命令/從數組中檢索: https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

Java 中的 Arrays 是對象,但它們不是任何 class 的實例。 沒有數組類 - 請參閱 object 類型 - 第 4.3.1 節

object 是 class 實例或數組。

數組對象類似於具有多個變量的類,但包含 10 個雙精度的數組不是 class。 更像是,“雙精度數組”是一種單一類型,實例變量的數量存儲在 object 本身的數組length字段中。

在 arrays - 第 10 節

在 Java 編程語言中,arrays 是對象(§4.3.1),是動態創建的,並且可以分配給類型為 Z497031794414A552435F901531AC3B54BZ 的變量(§4.3.2)。

數組 object 包含許多變量。 變量的數量可能為零,在這種情況下,數組被稱為是空的。 數組中包含的變量沒有名稱; 相反,它們被使用非負 integer 索引值的數組訪問表達式引用。 這些變量稱為數組的組件。

如何在 JVM 中實現 arrays 是另一回事。 在 OpenJDK 中,數組對象的 memory 布局包括一個指向“ArrayKlass”的指針,它是數組類型的內部表示。 數組的大小包含在數組 object 中,數組對象本身可以具有任意大小。 這與作為 class 實例的對象不同:class 實例的大小始終相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM