我意识到如果我将一个对象作为函数的参数传递并对其进行更改,则更改会“保留”该对象。但是整数并非如此。
public void start() {
int x = 100;
modify(x);
// I would like x to be 200 now. But it isn't :(
}
public void modify(int y) {
y *= 2;
}
基本上,有没有办法在上面的代码中实现我想要的东西?是否可以修改类似的整数(如对象引用)?
答案 0 :(得分:4)
使用primitives
时,没有“reference
”的概念。但是你可以通过以下方式实现你想要的目标:
x = modify(x);
可能是代码需要。
现在x
包含modify(x)
方法调用的结果。
答案 1 :(得分:3)
你做不到。基元按值传递。 (引用也按值传递。您不能修改对象引用;您只能修改引用的对象。)您可以做的最好的事情是:
public void start() {
int [] x = {100};
modify(x);
// x[0] is now 200 :)
}
public void modify(int []y) {
y[0] *= 2;
}
数组引用x
按值传递,但您可以修改数组元素。请注意,传递Integer
无济于事,因为Integer
对象是不可变的。
或者,您可以重新设计方法以返回doubled值并将其分配给调用代码(Nambari suggests)。
答案 2 :(得分:2)
在passing an array或using a return value旁边的第三种可能性是使用getter和setter传递某个ValueHolder
类的对象:
public class IntValueHolder
{
private int value;
public int getValue()
{
return this.value;
}
public void setValue(final int value)
{
this.value = value;
}
}
这在技术上与传递数组非常相似,但恕我直言更清洁,即它更好地描述了你的意图。
答案 3 :(得分:0)
您可以做的一件事是获取modify()方法的返回值,并将其分配给变量,如下所示。
public void start() {
int x = 100;
x=modify(x);
}
public int modify(int y) {
return y *= 2;
}