我一直理解Java是按值传递参数的。我有一些代码似乎无法调试。这是一个简化版本:
private isFinished = false;
private int target, count;
public Example(int target){
this.target = target;
}
public void doProcess(int x){
count += x;
}
public boolean isFinished(){
if(x < target){
return false;
} else {
return true;
}
}
private Example example;
public Test(Example e){
this.example = e;
}
public isFinished(){
return e.isFinished();
}
public void doProcess(){
e.doProcess(3);
}
private Example example;
public Generate(Example e){
this.example = e;
}
public void generate(int num){
for(int y=0; y < num; y++){
Test t = new Test(example);
while(t.isFinished == false){
t.doProcess();
}
}
}
Generate 类采用示例作为参数。它使用此示例并将其传递给“测试”。发生的情况是,当调用Generate.generate()时,第一次迭代工作正常,但在每次迭代时都应该使用作为参数传递的示例进行新的测试。当调用 doProcess() 时,“示例”似乎会发生变化,而我想要的是每次使用创建时传递给生成的相同示例创建一个新的测试。
最佳答案
Java 确实按值传递,但在引用参数的情况下,传递的是引用的值,而不是对象的值。这具有副作用,即这些引用指向的实例可以在方法内更改,并且在方法返回后可以看到更改。
关于Java:方法似乎是通过引用传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575869/