gpt4 book ai didi

java - 在 Java 中使用交换函数交换两个引用时出现意外结果

转载 作者:行者123 更新时间:2023-11-29 06:36:17 26 4
gpt4 key购买 nike

我有两个引用,引用a指向对象a,引用b指向对象b,然后我调用了一个swap函数试图让a指向对象b,b指向对象a,在swap中进行交换功能,但主要功能的结果没有改变。那我该怎么办?

交换函数:

private void swap(Stack<TreeNode> a, Stack<TreeNode> b) {
Stack<TreeNode> temp = new Stack<TreeNode>();
temp = a;
a = b;
b = temp;
}

最佳答案

交换的结果对于方法是局部的,一旦方法返回到它的调用点,它就不会产生任何影响——你只是在交换局部变量。调用该方法时,会传递对象引用的副本,而不是实际对象本身。

Java 具有按值传递语义,在将对象作为参数传递给方法的情况下,这意味着传递了引用的副本。看看这个post举个例子。

另请注意,该对象在调用该方法之前引用了现有对象,并且在内部方法中作为参数存在的引用实际上指向同一个对象,因此对一旦方法返回,您在方法中执行的对象内容保留在原位。

关于java - 在 Java 中使用交换函数交换两个引用时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com