【发布时间】:2015-08-21 23:17:16
【问题描述】:
如何在swap2() 函数中更改交换i,j 的值:
enter code here public class pass_by_ref {
public static void swap(Integer i, Integer j) //this will not change i j values in main
{
Integer temp = new Integer(i);
i = j;
j = temp;
}
public static void swap2(Integer i, Integer j)
{
i = 20; //as i am setting i value to 20 why isn't it reflected in main and same for j
j = 10;
}
public static void main (String[] args) throws java.lang.Exception
{
Integer i = new Integer(10);
Integer j = new Integer(20);
swap(i, j);
System.out.println("i = " + i + ", j = " + j);
swap2(i, j);
System.out.println("i = " + i + ", j = " + j);
}
}
输出:
i=10,j=20
i=10,j=20;
我认为 Integer i=new Integer(10) 创建了一个值为 10 的对象 i,所以当我在 swap2() 中写入 i=20;j=10 时,我正在设置值!..为什么它不起作用
我知道swap() 不会改变i,j 的值,但为什么swap2() 不起作用?
那么在swap2() 中进行什么更改以便交换值。
【问题讨论】:
-
你不能。 Java 是按值传递的。编写一个方法来做到这一点是不可能的。
-
我可以用 2 个整数 i 和 j 创建一个类,然后创建该类的一个对象,然后交换值吗?
-
是的,您可以这样做,或者您可以使用答案中的数组。它之所以有效,是因为数组是可变的。
-
我曾经为这样的问题写了一个可变包装类,如果你不想使用返回数组(无论出于什么原因)你可以使用这个肮脏的技巧。
标签: java pass-by-reference pass-by-value