Java 按引用传递和递归
我有以下递归函数原型:Java 按引用传递和递归,java,methods,parameters,parameter-passing,Java,Methods,Parameters,Parameter Passing,我有以下递归函数原型: public void calcSim(Type<String> fort, Integer metric) Integer metric = 0; calcSim(fort, metric); System.out.println("metric: " + metric); } public void calcSim(fort类型,整数度量) 整数度量=0; calcSim(福特,公制); System.out.println(“公制:“
public void calcSim(Type<String> fort, Integer metric)
Integer metric = 0;
calcSim(fort, metric);
System.out.println("metric: " + metric);
}
public void calcSim(fort类型,整数度量)
整数度量=0;
calcSim(福特,公制);
System.out.println(“公制:“+公制”);
}
我想打印如上所示的度量值。然而,它总是零。现在,当我在函数末尾打印时,我得到了一个有效的数字
Integer
是包装类。包装类是不可变的。因此,使用Integer
type无法实现您的期望
您可以围绕原语创建可变包装器类,并更新对象以实现所需目标。两个大问题:
public void calcSim(fort类型,整数度量)
如果(条件){
//打印或返回
}否则{
//修改fort或metric,使其退出
calcSim(fort,metric);//使用修改后的值调用它
System.out.println(“公制:“+公制值”);
}
}
要获得通过引用传递的行为,您可以创建一个包装类,并在该类中设置值,例如:
class MyWrapper {
int value;
}
然后可以将MyWrapper
传递给方法并更改值,例如:
public void calcSim(Type<String> fort, MyWrapper metric)
metric.value++;
System.out.println("metric: " + metric.value);
calcSim(fort, metric);
}
public void calcSim(类型fort,MyWrapper metric)
度量值++;
System.out.println(“公制:“+公制值”);
calcSim(福特,公制);
}
Java中没有“按引用传递”这样的东西,很抱歉:(
您可以选择为该方法提供一个返回值,或者使用可变包装器并在运行时设置该值。使用AtmoicInteger,因为它在JDK中,使您自己的方法不担心线程安全,当然会稍微快一些
AtomicInteger metric = new AtomicInteger(0);
calcSim(fort, metric);
System.out.println("metric: " + metric.get());
然后在calcSim内部使用
metric.set(int i);
,请。您永远不会更改metric
的值,因此它总是打印0
@pst:谢谢您的更正。注释已删除。让calcSim
返回结果,而不是尝试在适当的位置修改它。
AtomicInteger metric = new AtomicInteger(0);
calcSim(fort, metric);
System.out.println("metric: " + metric.get());