2012-03-01 66 views
4

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

+4

那么,这有什么问题?为什么Java没有这个东西?询问Java创作者。 – shift66 2012-03-01 11:06:42

+0

请参阅http://stackoverflow.com/questions/3624525/how-to-write-a-basic-swap-function-in-java和http://stackoverflow.com/questions/2393906/how-doi-i- make-my-swap-function-in-java – 2012-03-01 11:10:02

+0

@Ademiban更正你的语法。 – Juvanis 2012-03-01 11:10:26

回答

12

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


但是,您可以换另一个对象中的引用和swap的内部裁判:

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