为什么Java没有';不提供简单的交换功能吗?

为什么Java没有';不提供简单的交换功能吗?,java,pass-by-reference,swap,pass-by-value,Java,Pass By Reference,Swap,Pass By Value,每次我想交换两个值时,我必须使用临时值来进行实际交换。为什么Java不在任何类中为我们提供一个方便的方法来简单地交换两个变量的值呢。这就是为什么不能创建简单的交换方法 但是,可以将参照包裹在另一个对象内,并交换内部参照: public static void main(String[] args) { Ref<Integer> a = new Ref<Integer>(1); Ref<Integer> b = new Ref<Integ

每次我想交换两个值时,我必须使用临时值来进行实际交换。为什么Java不在任何类中为我们提供一个方便的方法来简单地交换两个变量的值呢。这就是为什么不能创建简单的交换方法


但是,可以将参照包裹在另一个对象内,并交换内部参照:

public static void main(String[] args) {
    Ref<Integer> a = new Ref<Integer>(1);
    Ref<Integer> b = new Ref<Integer>(2);

    swap(a, b);

    System.out.println(a + " " + b); // prints "2 1"
}

public static <T> void swap(Ref<T> a, Ref<T> b) {
    T tmp = a.value;
    a.value = b.value;
    b.value = tmp;
}

static class Ref<T> {
    public T value;

    public Ref(T t) {
        this.value = t;
    }

    @Override
    public String toString() {
        return value.toString();
    }
}
publicstaticvoidmain(字符串[]args){
参考a=新参考(1);
参考b=新参考(2);
掉期(a、b);
System.out.println(a+“”+b);//打印“2 1”
}
公共静态无效交换(参考a、参考b){
T tmp=a.值;
a、 值=b.值;
b、 数值=tmp;
}
静态类参考{
公共价值观;
公共参考号(T){
该值=t;
}
@凌驾
公共字符串toString(){
返回值.toString();
}
}

Java不提供这种方法,因为这是不可能的。 变量通过值传递给方法。是的,即使这些是物体。在这种情况下,我们通过值传递对对象的引用。因此,您不能在接收此变量作为参数的方法内更改源变量的值:

int a = 5;
int b = 6;
swap(a, b);
// a is still 5, b is still 6!


void swap(int first, int second) {
    int tmp = first;
    first = second;
    second = tmp;
}

那么问题是什么?为什么Java没有这样的东西?询问java创建者。查看并@Ademiban更正您的语法。我记不起上一次在实际代码中交换值是什么时候了。。。(除了在SO上发布的代码片段之外;)@Andreas_D-有人可能会说,你记不起来的原因是你潜意识里忽略了需要
交换的“解决方案”
:-)正如其他地方提到的,这可以通过将要交换的值包装到对象中来轻松实现。