在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;
}
但是真的没办法改变参考吗?或者可以使用一些不安全的解决方法来实现?
答案 0 :(得分:3)
局部变量只能在声明它们的方法中访问。当您调用其他方法并传入值时,这些值将复制到堆栈上的新位置。被调用的方法可以看到这些变量的新副本。换句话说,a
方法中使用的变量b
和swap
与调用方法中的变量a
和b
不同。它们在堆栈上有不同的位置。
因此,如果您想在调用方法中更改a
和b
的值,则必须使用相同的方法更改它们。完全没有办法在单独的方法中执行此更改,就像您在示例中尝试的那样。