如何在java中交换Integer类型

时间:2015-08-21 23:17:16

标签: java pass-by-reference pass-by-value

如何在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)会创建一个值为10的对象i,所以当我在i=20;j=10中写swap2()时,我会设置值!..为什么不是'它工作      我知道swap()不会更改i,j值,但为什么swap2()不起作用?      那么在swap2()中做出什么改变以便交换值。

1 个答案:

答案 0 :(得分:1)

Java 始终按值传递,CMakeLists.txt是不可变的,您无法更新调用者引用。您可以使用数组(存储在数组中的值是 mutable )。因为数组是Integer,所以它的值通过对数组实例的引用值传递,因此您可以修改数组中的值。像,

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;
}

然后(在输出中)值 swap

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));
}