Массив Java примитивов сохранен в стеке или "куче"?

У меня есть объявление массива как это:

int a[];

Здесь a массив примитива int ввести. Где этот массив хранится? Это хранится на "куче" или стеке? Это - тип primitve int, все типы примитивов не хранятся на "куче".

81
задан BalusC 25 December 2015 в 08:49
поделиться

4 ответа

Это также может быть хорошо прочитано относительно незначительных различий в использовании: Linq Training Guide

-121--232456-

В языке программирования Java массивы являются объектами, динамически создаются и могут быть назначены переменным типа Object.

http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

-121--813911-

Это массив примитивных типов, который сам по себе не является примитивным. Хорошее правило - когда задействовано новое ключевое слово, результат будет в куче.

20
ответ дан 24 November 2019 в 09:29
поделиться

В языке программирования Java массивы являются объектами, создаются динамически и могут быть присвоены переменным типа Object.

http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

2
ответ дан 24 November 2019 в 09:29
поделиться

Это будет сохранено На ходу

, потому что массив является объектом в Java.

Редактировать : Если у вас есть

int [] testScores; 
testScores = new int[4];

Подумайте об этом коде, что говоря к компилятору, «Создать объект массива, который будет держать четыре INTS, и присвоить его в ссылочную переменную с именем Testscores , Также идти вперед и установить каждый int элемент до нуля. Спасибо. "

36
ответ дан 24 November 2019 в 09:29
поделиться

Как сказал гурукулки, он хранится в куче. Тем не менее, ваш пост предполагает недоразумение, вероятно, из-за того, что какой-то благонамеренный человек пропагандирует миф о том, что «примитивы всегда живут в стеке». Это неправда. Локальные переменные имеют свои значения в стеке, но не все примитивные переменные являются локальными ...

Например, рассмотрим следующее:

public class Foo
{
    int value;
}
...

public void someOtherMethod()
{
    Foo f = new Foo();
    ...
}

Теперь, где находится f.value жить? Согласно мифу, он находится в стеке, но на самом деле он является частью нового объекта Foo и живет в куче 1 .(Обратите внимание, что значение f само по себе является ссылкой и находится в стеке.)

Отсюда легко перейти к массивам. Вы можете думать о массиве как о множестве переменных - так что new int [3] немного похож на класс такой формы:

public class ArrayInt3
{
    public readonly int length = 3;
    public int value0;
    public int value1;
    public int value2;
}

1 На самом деле, это более сложно чем это. Различие стека / кучи в основном связано с реализацией - я считаю, что некоторые JVM, возможно, экспериментальные, могут определить, когда объект никогда не «ускользает» от метода, и могут выделить весь объект в стеке. Однако это концептуально в куче, если вы решите заботиться.

143
ответ дан 24 November 2019 в 09:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: