Java 尝试从单独的方法递增局部变量,但不起作用。关于激活堆栈/记录的混淆

Java 尝试从单独的方法递增局部变量,但不起作用。关于激活堆栈/记录的混淆,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){

当我调用上面的代码时,返回数字0


即使将
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
 }
}