我正在尝试从另一个类更改变量,并在第一个类中使用它。
我在类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和编程都很陌生。
答案 0 :(得分:4)
问题是
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!
答案 1 :(得分: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();
答案 2 :(得分:0)
类var
的{{1}}方法中的test
参数是副本,而不是引用或指针。因此,您无法在课程second
中更改var
的值。
为了实现目标,您可以将First
声明为全局变量,如下所示:
var
答案 3 :(得分:0)
嗯,你在第二堂课中已经改变了,但是你没有把它归还给第一堂课。如果你不退还,头等舱不可能知道你在其他班级改变了它。 你可以这样做,希望它有所帮助。
头等舱:
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;
}
}