Java 如何处理基元类型数组

本文关键字:类型 数组 处理 何处理 Java | 更新日期: 2023-09-27 18:35:42

可能的重复项:
整数数组如何在 JVM 内部存储?

在 C# 中,当您创建一个引用类型的新数组时,它会将指针放在 Stack 上并在堆中对象本身。如果您使用简单的基元类型(如 intdouble 等)创建此数组,它的作用是将值准确地放在堆中的位置,而不是指向存储其内容的另一个堆地址的指针。

那么有人可以解释一下这在 Java 中是如何发生的吗?Java 一直在数组中使用Integer(引用类型),还是像 C# 一样对待值类型?

int[] hello = new int[5];
hello[0] = 2; // C# put this value directly in same slot and doesn't 
//create a wrapping object.

我知道一个叫做 Java 包装类型的东西,C# 没有。C# 具有自动装箱功能,但Int32说不是引用类型,而是ValueType 其中 Integer 是一个对象而不是int。您可以使用Object o = 5;对值进行装箱,或者如果结构确实具有父类,您也可以使用它将其包装在堆(装箱)中。

Java 如何处理基元类型数组

Java和你描述的差不多。

int[] hello = new int[5]; // reference hello is on stack, the object is on the heap.
hello[0] = 2; // Java puts this value directly in same slot and doesn't 
              // create a wrapping object.
Java 原语数组作为

原语数组存储在堆中,而不是整数等。我不相信指定了它们存储方式的实际实现,因此布尔值 [] 很可能由内存中的 int[] 实现

在Java中,数组被视为对象,无论它包含原始变量还是对象类型,在java中,数组只有一个实例变量称为长度。

int[] arr = new int[5];

这里的arr是一个对象引用数组变量,如果它Inside方法使用(即作为local variable),则存储在STACK上,But如果它用作instance variable,则存储在Heap的对象内。