Это известно как переменное затенение.
Переменные имеют так называемую область действия, что означает, что к ним можно получить доступ только на уровне, который они объявили или выше.
Переменная, объявленная на уровне класса - поля, доступные на уровне класса и уровне метода.
Переменная, объявленная на уровне метода, доступна только из метода.Вы можете объявлять переменные на разных уровнях с одинаковыми именами.
Переменная, объявленная в методе с тем же именем, что и переменная уровня класса, имеет больший приоритет над переменной экземпляра, поэтому компилятор использует эту переменную.Это теневое копирование
Конструктор - это особый метод.
public class Consttest{
int a = 12; // instance level scope, can be 'seen' at the class level or method level
Consttest(){
int a = 2; // where is this gone? - this is declared at the method level which shadows the instace variable a
}
public static void main(String[] args){
Consttest test = new Consttest();
System.out.println(test.a); // a=12
}
}
Когда вызывается метод, создается новый стековый фрейм.Когда метод возвращает этот стековый фрейм, он выталкивается из стека, и любые переменные, созданные в стековом фрейме, разыменовываются, если только вы не передадите ссылку на объект, поэтому в ответ на вопрос, куда он идет?- Это ушло.