每次我想交换两个值时,都需要使用临时变量进行实际的交换。为什么Java不给我们一个方便的方法,在任何类中仅仅交换两个变量的值呢?
每次我想交换两个值时,都需要使用临时变量进行实际的交换。为什么Java不给我们一个方便的方法,在任何类中仅仅交换两个变量的值呢?
Java是传值的。这就是为什么你不能创建一个简单的交换方法(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();
}
}
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;
}