Таким образом, на языке, подобном C, память разделена на 5 различных частей: ядро ОС, текстовый сегмент, статическая память, динамическая память и стек. Примерно так:
Если мы объявили статический массив в C, вы должны были указать его размер заранее, после того как он будет исправлен навсегда. Программа выделит достаточно памяти для массива и поместит его в сегмент статических данных, как и ожидалось.
Однако я заметил, что в Java вы можете сделать что-то вроде этого:
public class Test {
static int[] a = new int[1];
public static void main( String[] args ) {
a = new int[2];
}
}
и все будет работать так, как вы ожидаете. У меня вопрос, почему это работает в Java?
РЕДАКТИРОВАТЬ: Таким образом, консенсус заключается в том, что int[]
в Java действует более похоже на int*
в C. Так что в качестве дополнительного вопроса, есть ли способ выделить массивы в статической памяти в Java (если нет , почему бы и нет)? Разве это не обеспечило бы более быстрый доступ к таким массивам?
EDIT2: ^ теперь это новый вопрос: Где статические переменные класса хранятся в памяти?