Итак, в таком языке, как 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: ^ теперь в новом вопросе: Где статические переменные класса хранятся в памяти?