为什么Java不提供简单的交换功能?

时间:2012-03-01 11:05:00

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

每次我想交换两个值时,我都必须使用临时来进行实际的交换。 为什么Java不在任何类中为我们提供设施方法来简单地交换两个变量的值?

2 个答案:

答案 0 :(得分:12)

Java是Pass-by-Value。这就是为什么你不能创建一个简单的交换方法(ref)


然而,您可以将引用包装在另一个对象中并交换内部引用:

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

答案 1 :(得分:3)

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