您好我想知道如何将变量作为参数发送到方法并让方法更改它。例如
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.谢谢。
答案 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;
}