Java 如何处理基元类型数组
本文关键字:类型 数组 处理 何处理 Java | 更新日期: 2023-09-27 18:35:42
可能的重复项:
整数数组如何在 JVM 内部存储?
在 C# 中,当您创建一个引用类型的新数组时,它会将指针放在 Stack 上并在堆中对象本身。如果您使用简单的基元类型(如 int
、double
等)创建此数组,它的作用是将值准确地放在堆中的位置,而不是指向存储其内容的另一个堆地址的指针。
那么有人可以解释一下这在 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和你描述的差不多。
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
的对象内。