Java如何处理原始类型数组?

时间:2012-05-30 16:55:25

标签: c# java arrays primitive-types

  

可能重复:
  How are Integer arrays stored internally, in the JVM?

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

有人可以解释一下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;打包一个值,或者如果struct有父类,您也可以使用它将它包装在堆中(装箱)。

3 个答案:

答案 0 :(得分:3)

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.

答案 1 :(得分:2)

Java原始数组作为基元数组存储在堆中,而不是整数等。我不相信指定它们的存储方式的实际实现,所以boolean []可能很好地由int实现内存中的[]

答案 2 :(得分:1)

在Java中,Array被认为是一个Object,无论它是否包含原始变量或对象类型,在java中,Array只有一个且只有一个名为length的实例变量。

int [] arr = new int [5];

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