我一直理解Java按值傳遞參數。我有一些我似乎無法調試的代碼。這裏有一個簡化版本: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類以一個Example作爲參數。它使用此示例並將其傳遞給「測試」。發生什麼事情是,當調用Generate.generate()時,第一次迭代可以正常工作,但是在每次迭代時,應該將新的Test作爲參數傳遞給該示例。當我調用doProcess()的時候,'示例'似乎正在被改變,當我想要的是每次使用創建時傳遞給Generate的同一個示例創建一個新的Test。
閱讀http://stackoverflow.com/questions/40480/is-java-pass-by-reference – Craig
只有一個'Example',那麼這是唯一可以使用的'Example'。你在哪裏創建一個新的'Example'?你正在修改單個實例的內部。 –