This question already has answers here:
Java method to swap primitives
(8个答案)
4年前关闭。
我该如何在
输出:
我认为
我知道
好在
然后你可能会这样称呼它
然后(在输出中)值交换。
(8个答案)
4年前关闭。
我该如何在
i,j
函数中更改交换swap2()
的值: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)
创建的对象i
的值为10,所以当我在i=20;j=10
中写swap2()
时,我正在设置值!..为什么它不起作用我知道
swap()
不会更改i,j
值,但是为什么swap2()
不起作用?好在
swap2()
中进行什么更改,以便交换值。 最佳答案
Java总是按值传递,Integer
是不可变的,您无法更新调用者引用。您可以使用数组(数组中存储的值是可变的)。因为array是Object
,所以它的值由引用的值传递给数组实例,因此您可以修改数组中的值。就像是,
static void swap(int[] arr, int i, int j) {
// error checking
if (arr == null || i == j) {
return;
}
if (i < 0 || j < 0 || i > arr.length - 1 || j > arr.length - 1) {
return;
}
// looks good, swap the values
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
然后你可能会这样称呼它
public static void main(String[] args) {
int[] arr = { 10, 20 };
System.out.println(Arrays.toString(arr));
swap(arr, 0, 1);
System.out.println(Arrays.toString(arr));
}
然后(在输出中)值交换。
[10, 20]
[20, 10]
08-16 09:29