Java:为什么这种交换方法不起作用?

wit*_*zar 30 java

我有以下代码:

public class Main {

    static void swap (Integer x, Integer y) {
        Integer t = x;
        x = y;
        y = t;
    }

    public static void main(String[] args) {
       Integer a = 1;
       Integer b = 2;
       swap(a, b);
       System.out.println("a=" + a + " b=" + b);
    } 
}
Run Code Online (Sandbox Code Playgroud)

我希望它打印a = 2 b = 1,但它打印相反.显然交换方法不会交换a和b值.为什么?

Svi*_*ish 50

这与整数的不变性无关; 它与Java是Pass-by-Value,Dammit 这个事实有关!(没有恼火,只是文章的标题:p)

总结一下:你无法在Java中实现交换方法.您只需自己进行交换,无论您需要它; 这反正只是三行代码,所以不应该是那么多问题:)

    Thing tmp = a;
    a = b;
    b = tmp;
Run Code Online (Sandbox Code Playgroud)

  • 但你实际上并没有交换整数,这似乎是目标.如果我有一辆带两辆车的停车场然后让第一辆车看起来和第二辆车完全一样,那么第二辆车就像第一辆车一样,我会换车吗?并不是的.我会做很多工作来让它看起来那样. (8认同)
  • 为什么要投票?我误解了什么吗? (4认同)
  • 不,你不能用Java交换的原因是因为你有_no_指针.指针是在c ++中启用交换方法的原因.您可以交换两个对象字段的值,但不能使用通用交换功能.即便如此,它只是在上面的汽车示例中所说的. (2认同)

Rav*_*pta 9

Java中的所有内容都是按值传递的,变量的值始终是基元或对象的引用.