Попытка увеличить локальную переменную из отдельного метода, но не работает. Путаница по поводу активации стека / записи

public class Demo {
    public static void main(String[] args){
        Demo instance = new Demo();
        instance.init();
    }
    public void init() {
        int size = 0;
        inc(size);
        System.out.println(size);
    }
    public int inc(int size){
        size++;
        return size;
    }
}

Когда я вызываю код, указанный выше, возвращается ноль.

Даже декларируя size так как атрибут класса вместо локальной переменной не решает проблему. Я понимаю, что когда метод завершен, соответствующая запись (содержащая локальную переменную и т. Д.) Извлекается из стека активации. Но если size переменная объявлена ​​в init() метод, а затем увеличивается и возвращается в отдельный метод (inc()), не должен ли размер быть равен 1?

2 ответа

size = inc(size);

решит вашу проблему, так как вы не используете общедоступную переменную.

Если вы хотите сделать это немного элегантнее (по крайней мере, я думаю, что это будет немного более удобно), то вам нужно объявить переменную как переменную класса. Я проиллюстрирую это вам:

public class Demo {    
  int size; //global range variable

  public static void main(String[] args){
    Demo instance = new Demo();
    instance.init();
  }

  public void init() {
    this.size = 0;
    inc();
    System.out.println(this.size);
 }

 public void inc(){
   this.size++; //will increment your variable evertime you call it
 }
}

При увеличении вы не присваиваете значение чему-либо, он увеличивает его, но нигде не сохраняет, поэтому значение остается 0, попробуйте сделать это.

public class Demo 
{
    public static void main(String[] args)
    {
        Demo instance = new Demo();
        instance.init();
    }
    public void init() 
    {
        int size = 0;
        size = inc(size);
        System.out.println(size);
    }
    public int inc(int size)
    {
        size++;
        return size;
    }
}

или как это

public class Demo 
{
    public static void main(String[] args)
    {
        Demo instance = new Demo();
        instance.init();
    }
    public void init() 
    {
        int size = 0;
        System.out.println(inc(size));
    }
    public int inc(int size)
    {
        size++;
        return size;
    }
}
Другие вопросы по тегам