#java #heap-memory #activation-record
#java #куча-память #активация-запись
Вопрос:
Итак, что касается переменной int x
. В начале этого класса int x
и и String s
хранятся в памяти кучи. Однако, когда конструктор инициируется, int x
сохраняется в памяти стека И памяти кучи, поскольку конструктор технически является методом или нет?
public class A {
int x;
public String s = "";
public A(int y) {
x = y;
}
}
Комментарии:
1. Конструктор не является методом, и даже если бы это было так, это не повлияло бы на то, где хранится переменная экземпляра
x
.
Ответ №1:
y
хранится в стеке, поскольку это переменная с ограниченной областью действия для этого метода. x
просто изменяется на месте в куче.
Комментарии:
1. таким образом, x = y вообще не сохраняет x в стеке, несмотря на то, что находится в методе?
2. CosmicCat, значение копируется из y (в стеке) в x (в куче).
3. Стек создается из переменных, определенных в методе, а не из всех переменных, к которым осуществляется доступ в методе.