【问题标题】:How do I change a variable from a different class in Java?如何从 Java 中的不同类更改变量?
【发布时间】:2014-02-10 03:44:44
【问题描述】:

如何从 Java 中的不同类更改变量?

我正在尝试从另一个类中更改一个变量,并在第一个类中使用它。

我在 First 类中创建了一个变量,并将其值设为 1。然后我尝试在 Second 类中将同一变量的值更改为 2,但当我在 First 类中使用它时它又变回了 1。

我是 Java 新手,还不太了解,所以如果你能尽量让答案保持简单,那就太好了 :)


班级第一:

public class First {

    public static void main(String args[]){


    int var = 1; //Variable i'm trying to change from class "Second"

    Second Second = new Second();

    System.out.println(var); //Prints out 1

    Second.test(var); 

    System.out.println(var); // Prints out 1 again, even though I changed it

}
}


二等:
public class Second {

    void test(int var){
    /*
     * 
     * I try to change var to 2, and it works in this class
     * but when it doesn't change in the class "First"
     * 
     */
    var = 2;
    System.out.println(var); //Prints out 2

}
}

输出的样子:

1
2
1

我想要得到什么:

1
2
2


我试图找到这个问题的答案,但我能找到的所有答案对我来说都没有任何意义,因为我对 Java 和编程非常陌生。

【问题讨论】:

  • 您需要完成一些基本教程。看看这个关于variable scope的页面,它非常清楚地解释了为什么你的代码没有达到你的预期。
  • 你可以使用class变量,而不是local

标签: java class variables


【解决方案1】:

问题是

Second.test(var); 

这不是错误。它只是没有做你认为它在做的事情。

传递给函数的原语(int 称为原语...它不是对象)可以在该函数中更改,但在副本中。一旦函数完成,原始值是相同的,因为它从未改变过

你想要的是

int test(int var){
   var = 2;
   System.out.println(var); //Prints out 2
   return  var;
}

然后代替

Second.test(var); 

使用

var = Second.test(var);

这个参数其实一点意义都没有。相当于

var = Second.test();

...

int test(){
   int var = 2;
   System.out.println(var); //Prints out 2
   return  var;
}

我希望这会有所帮助。祝你好运,欢迎使用 Java,欢迎使用 stackoverflow!

【讨论】:

    【解决方案2】:

    Java 是pass-by-value,这意味着您正在传递var 的副本。你可以做的是让方法test()返回一个int

    int test(int var){
        ...
        var = 2;
        System.out.println(var); //Prints out 2
        return var;
    }  
    

    然后将其结果(方法test()返回的值)赋值给var

    var = second.test(var);
    System.out.println(var); //Prints out 2
    

    注意:

    Second Second = new Second();
    

    您不应该使用类的名称作为变量的名称。这样做:

    Second second = new Second();
    

    【讨论】:

      【解决方案3】:

      testsecond 方法中的 var 参数是一个副本,而不是引用或指针。所以你不能改变First类中var的值。

      为了实现您的目标,您可以将var 声明为全局变量,如下所示:

      public class First {
      
          public int var = 1; 
      
          public static void main(String args[]){
      
          Second Second = new Second();
      
          System.out.println(var);
      
          Second.test(); 
      
          System.out.println(var);
      
      }
      }
      
      public class Second {
      
          void test(){
          /*
           * 
           * I try to change var to 2, and it works in this class
           * but when it doesn't change in the class "First"
           * 
           */
          First.var = 2;
          }
      }
      

      【讨论】:

        【解决方案4】:

        嗯,你已经在二等舱改变了它,但你没有把它放回一等舱。如果您不退回它,头等舱不可能知道您已经在其他班级更改了它。 您可以这样做,希望对您有所帮助。

        头等舱:

        public class First {
        
            public static void main(String args[]){
        
        
                int var = 1;
        
                Second Second = new Second();
        
                System.out.println(var); //Prints out 1
        
                var = Second.test(var); 
        
                System.out.println(var); //Prints out 2
        
            }
        }
        

        二等:

        public class Second {
        
            int test(int var){
        
                var = 2;
        
                System.out.println(var); //Prints out 2
        
                return var;
        
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-28
          • 2020-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多