2016-12-15 61 views
0

我有以下代码:在Java中,我如何传递Integer变量作为参考?

public static void main(String[] args) { 
     Integer testInt = new Integer(100); 
     Integer testInt2 = new Integer(200); 
     System.out.println("Before testInt is " + testInt); 
     System.out.println("Before testInt2 is " + testInt2); 
     swap(testInt, testInt2); 

     //Integer temp = testInt; 
     //testInt = testInt2; 
     //testInt2 = temp; 

     System.out.println("testInt is " + testInt); 
     System.out.println("testInt2 is " + testInt2); 

    } 
    public static void swap(Integer x, Integer y){//x and y point to testInt //and testInt2 
     Integer temp = x;//temp.operator=() or temp->operator()=x 
     x = y; 
     y = temp; 
    } 

我需要交换功能工作。我的理解是,Java通过价值传递一切,意味着副本被发送。在C中,我可以发送testInt和testInt2作为指针(testInt *,testInt2 *),然后取消引用它们来设置它们的值。我怎样才能在Java中做到这一点?

这是我目前得到的值(不交换):

Before testInt is 100 
Before testInt2 is 200 
testInt is 100 
testInt2 is 200 

谢谢。

+5

你不能。所有东西都通过Java的价值传递,包括引用。 – Kayaman

+0

简答:你不。你需要一些其他的类,有一个可变的int域。整数不会为你做。 – yshavit

+0

你不能,这是为什么:http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value?rq=1 – DejaVuSansMono

回答

2

把它们放入数组

public static void swap(Integer[] vars){//x and y point to testInt //and testInt2 
     Integer temp = vars[0];//temp.operator=() or temp->operator=x() 
     vars[0] = vars[1]; 
     vars[1] = temp; 
} 
+0

为什么这项工作?变量也是一个拷贝到保存这两个值的实际数组中。 –

+1

不,变量是对实际数组的引用的副本。你不能改变引用('vars = null'),但你可以改变引用对象的状态('vars [0] = null')。由于'Integer'是不可变的,而Java是按值传递的,所以你不能只用'Integer'来完成。然而,可变的AtomicInteger也允许你用'set()'方法交换“诡计”。标记的重复问题对此有很多解释。 – Kayaman