我可以修改“引用的”整数变量吗?

时间:2012-09-24 03:49:02

标签: java

我意识到如果我将一个对象作为函数的参数传递并对其进行更改,则更改会“保留”该对象。但是整数并非如此。

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;
}

基本上,有没有办法在上面的代码中实现我想要的东西?是否可以修改类似的整数(如对象引用)?

4 个答案:

答案 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 arrayusing 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;
}