在方法中交换对象引用

时间:2018-02-21 19:11:41

标签: java

Java中,如果不包装到其他对象或使用数组,则无法执行此操作。这不起作用。

a; // Object@12345
b; // Object@56789
swap(a, b);
a; // Object@12345
b; // Object@56789

void swap(Object a, Object b) {
     Object temp = a;
     a = b;
     b = temp;
}

但是真的没办法改变参考吗?或者可以使用一些不安全的解决方法来实现?

1 个答案:

答案 0 :(得分:3)

局部变量只能在声明它们的方法中访问。当您调用其他方法并传入值时,这些值将复制到堆栈上的新位置。被调用的方法可以看到这些变量的新副本。换句话说,a方法中使用的变量bswap与调用方法中的变量ab不同。它们在堆栈上有不同的位置。

因此,如果您想在调用方法中更改ab的值,则必须使用相同的方法更改它们。完全没有办法在单独的方法中执行此更改,就像您在示例中尝试的那样。