2012-05-30 2 views
1

Можно создать дубликат:
How are Integer arrays stored internally, in the JVM?Как Java обрабатывает примитивные типы массивов?

В C#, когда вы создаете новый массив, который является ссылочным типом, так что помещает указатель на стек и сам объект в Heap. Если вы создаете этот массив с простыми примитивными типами, такими как 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;, либо если у struct есть родительский класс, вы можете использовать его, чтобы обернуть его в кучу (бокс).

+2

http://stackoverflow.com/questions/76549/how-are-integer-arrays-stored-internally-in-the-jvm – theglauber

+2

Проблем нет. Однако, в то время как 'List ' отлично в C#, Java это не нравится. – harold

+0

http://stackoverflow.com/questions/5564423/arrays-in-java-and-how-they-are-stored-in-memory – theglauber

ответ

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. 
+2

Мне очень нравится ваш ответ :) быстрый и лаконичный ... – Tarik

2

Java примитивные массивы хранятся в куче как массивы примитивов, а не целых и т. Д. Я не считаю, что фактическая реализация того, как они хранятся, указана, поэтому логическое [] может быть реализовано с помощью int [] в памяти

1

В Java, массив рассматривается как объект содержит ли примитивные переменные или тип объекта, в Java массив имеет один и только один экземпляр переменной длины с именем.

int [] arr = new int [5];

обр здесь является переменной массива ссылка на объект, который хранится на STACK, если его использовали Inside метод (т.е. как local variable), But, если его используют в качестве instance variable, то его хранится внутри объекта на Heap.

+0

Спасибо за ответ Кумар, но, похоже, мы говорим о те же вещи. Я знал это, но мне было интересно, как Java хранит примитивные типы в куче с помощью массивов. Ну, я получил ответы в предыдущих ответах. – Tarik

Смежные вопросы