Попытка увеличить локальную переменную из отдельного метода, но не работает. Путаница по поводу активации стека / записи
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;
}
}