交换功能:
private void swap(Stack<TreeNode> a, Stack<TreeNode> b) {
Stack<TreeNode> temp = new Stack<TreeNode>();
temp = a;
a = b;
b = temp;
}
答案 0 :(得分:5)
交换的结果是方法的本地,一旦方法返回其调用点就不会有任何影响 - 你只是交换局部变量。调用该方法时,会传递对象引用的副本,而不是实际的对象本身。
Java具有按值传递的语义,在对象作为参数传递给方法的情况下,这意味着传递了引用的副本。请查看此post作为示例。
另请注意,对象在调用方法之前引用现有的,并且作为参数的方法中的 in 内部的引用实际上指向同一个对象,因此对方法返回后,您在方法中执行的对象内容将保留在原位。
答案 1 :(得分:2)
您正在更改本地参数,而不是这些参考的实际内容。一种解决方案是修改您发送的实例。 E.g。
private boolean swap(Stack<TreeNode> a, Stack<TreeNode> b)
{
if(a == null || b == null) return false;
Stack<TreeNode> temp = new Stack<>();
while(!a.empty()) temp.add(a.pop());
while(!b.empty()) a.add(0, b.pop());
while(!temp.empty()) b.add(temp.pop());
return true;
}