будет ли переменная ‘x’ в этом фрагменте кода сохранена в памяти стека, памяти кучи или в обоих?

#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. Стек создается из переменных, определенных в методе, а не из всех переменных, к которым осуществляется доступ в методе.