This question already has answers here:
Is it possible to write swap method in Java? [duplicate]
                                
                                    (13个回答)
                                
                        
                        
                            How to do the equivalent of pass by reference for primitives in Java
                                
                                    (6个答案)
                                
                        
                4年前关闭。
            
        

在Java中,原始数据类型参数似乎将按值传递给方法。但是,如果我想交换两个整数的值该怎么办。

public static void main(String[] args){
   int a = 1;
   int b = 2;
   swapvalue(a,b);
   System.out.println(a);
   System.out.println(b);
}

public static void swapValue(int a, int b){
   int c = a;
   a = b;
   b = c;
}


例如,上面的代码旨在交换a和b的值。在C ++中,我可以传递指针或对其的引用,但是我不知道如何在没有指针的情况下在Java中执行此操作。我该怎么做?

最佳答案

您不能通过将它们传递给方法来交换它们。

您可以做的最接近的事情是将int []传递给方法,然后交换数组的元素:

public static void main(String[] args){
   int[] arr = {1,2};
   swapValues(arr);
   System.out.println(arr[0]);
   System.out.println(arr[1]);
}

public static void swapValues(int[] arr){
   int c = arr[0];
   arr[0] = arr[1];
   arr[1] = c;
}


另一种选择是用一些可变的类包装它们:

public class IntHolder
{
    private int value;
    ...
}

public static void main(String[] args){
   IntHolder a = new IntHolder(1);
   IntHolder b = new IntHolder(2);
   swapValue(a,b);
   System.out.println(a.getInt());
   System.out.println(b.getInt());
}

public static void swapValue(IntHolder a, IntHolder b){
   int c = a.getInt();
   a.setInt(b.getInt());
   b.setInt(c);
}

10-07 12:57
查看更多