在C#中,当您创建一个新的数组时,它是一个引用类型,因此它将一个指针放在Stack上,并将对象本身放在Heap中。如果使用简单的基本类型(如int
,double
等)创建此数组,它的作用是将值准确地放在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有父类,您也可以使用它将它包装在堆中(装箱)。
答案 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}}上的对象内。