13

您好,我想知道如何将变量作为参数发送给方法并通过方法对其进行更改。例如

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。谢谢。

4

5 回答 5

10

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

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

并重新分配它...

int i = 2;
i  = doThis(i);
于 2013-05-12T03:40:55.877 回答
7

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 是不可变的,所以没有能力像那样被改变。所以你在这里有两个选择:

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

于 2013-05-12T05:42:51.417 回答
6

我希望它打印出 3 而不是 2

更改方法以返回值

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


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

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

于 2013-05-12T03:40:20.153 回答
1

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

于 2013-05-12T04:42:42.337 回答
1

java就是传值。所以它不会改变你想要的方式。 在这里阅读更多

但是你做以下来解决这个问题

i = doThis(i);

public static int doThis(int i) {
    i = 3;
    return i;
}
于 2013-05-12T03:43:29.887 回答