Java 尝试从单独的方法递增局部变量,但不起作用。关于激活堆栈/记录的混淆
当我调用上面的代码时,返回数字0Java 尝试从单独的方法递增局部变量,但不起作用。关于激活堆栈/记录的混淆,java,memory,methods,heap-memory,activation-record,Java,Memory,Methods,Heap Memory,Activation Record,当我调用上面的代码时,返回数字0 即使将size声明为类属性而不是局部变量也不能解决问题。我知道当一个方法完成时,相应的记录(包含局部变量等)会从激活堆栈中弹出。但是,如果size变量是在init()方法中声明的,然后在单独的方法(inc())中递增并返回,那么size不应该等于1吗?递增时,不将值赋给任何对象,而是递增,但不存储在任何位置,因此值保持为0,试着这样做 public class Demo { public static void main(String[] args){
即使将
size
声明为类属性而不是局部变量也不能解决问题。我知道当一个方法完成时,相应的记录(包含局部变量等)会从激活堆栈中弹出。但是,如果size
变量是在init()
方法中声明的,然后在单独的方法(inc()
)中递增并返回,那么size不应该等于1吗?递增时,不将值赋给任何对象,而是递增,但不存储在任何位置,因此值保持为0,试着这样做
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;
}
}
还是像这样
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;
}
}
将解决您的问题,因为您没有使用公共作用域变量
如果您想让它变得优雅一点(至少我认为这会更方便一点),那么您需要将一个变量声明为类变量。
我将向大家说明这一点:
size = inc(size);
您从未将size设置为等于method inc的返回值,如果您切换这一行:
inc(size)代码>到该size=inc(大小)代码>那么在我的解决方案中,当从堆栈弹出时,增量基本上返回为零?在您的解决方案中,它返回变量size并将控制权交还给init()方法?是的,您是对的,在您的情况下,return方法在任何地方都不会返回“incremented”值,在我的情况下,它会覆盖size的当前值,使用inc()返回的递增值
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
}
}