Java通过方法改变变量的值?

时间:2013-05-12 03:37:37

标签: java

您好我想知道如何将变量作为参数发送到方法并让方法更改它。例如

public class Main {
    public static void main(String[] args) {
        int i = 2;
        doThis(i);
        System.out.println(i);  
    }

    public static void doThis(int i) {
        i = 3;
    }
}

我希望打印出3而不是2.谢谢。

5 个答案:

答案 0 :(得分:7)

Java无法做到这一点。但是,您可以从方法中返回值...

public static int doThis(int i) {
    return 3;
}

重新分配......

int i = 2;
i  = doThis(i);

答案 1 :(得分:5)

  

我希望打印出3而不是2

更改方法以返回值

int i = 2;
i = doThis(i);


public static int doThis(int i) {
    i = 3;
    return i;
}

它将原语的值从调用者复制到参数

答案 2 :(得分:3)

Java按值传递所有内容,因此如果在类方法中使用赋值运算符,则不会更改原始对象。

例如:

public class Main {
    public static void main(String[] args) {
        Integer i = new Integer(2);
        setToThree(i);
        System.out.println(i);
    }

    public static void setToThree(Integer i) {
        i = new Integer(3);
    }
}

将打印2。

话虽如此,如果您在引用中传递的对象是可变的,您可以按照您想要的方式对其进行更改。

例如:

public class Main {
    public static void main(String[] args) {
        MyMutableInt i = new MyMutableInt(2);
        setToThree(i);
        System.out.println(i);
    }        

    public static void setToThree(MyMutableInt i) {
        i.set(3);
    }
} 

这将打印3(假设MyMutableInt具有正确的toString()方法)。

当然,Java Integers是不可变的,因此无法像这样进行更改。所以你有2个选择:

注意:这不适用于任何类型的基元。为此,您将不得不通过返回值返回。如果你有多个值要变异,你必须将它们包装在一个对象中以返回它们,所以你也可以使用这个方法。

答案 3 :(得分:1)

Java是原始数据类型或对象的值传递 参考数据类型参数(如对象)也按值传递给方法。

答案 4 :(得分:0)

java是关于传递值的全部内容。所以它不会改变你想要的方式。 Read here for more

但是你这样做是为了解决这个问题

i = doThis(i);

public static int doThis(int i) {
    i = 3;
    return i;
}