gpt4 book ai didi

java - 关于java按值传递的澄清

转载 作者:行者123 更新时间:2023-12-01 06:17:59 26 4
gpt4 key购买 nike

我很困惑为什么下面的代码没有改变节点a的数据:

public class Node{Node next; int data;}
public static void change(Node a)
{
a = a.next;
}

public static void main(String [] args){

Node a = new Node();
Node b = new Node();
a.next = b;
a.data = 1;
b.next = null;
b.data = 2;
change(a);
System.out.print(a.data); //Still 1, why isn't it changed to 2?
}

既然 Node 是一个对象,那么通过值传递给方法的引用是否会发生变化?这意味着对传入的 Node 所做的任何更改实际上都应该更改该节点?

最佳答案

这是因为在 Java 中,您通过引用副本调用方法。

这意味着当您调用 change(a); 时,Java 基本上会创建引用 a 的副本,这将是 public static 中的传入参数voidchange(节点a)。在该方法内,您将更改复制的引用以指向其他位置。一旦你的方法返回,这将不起作用。

尽管没有中间的方法,但完全相同的代码也可以工作。

执行此操作a = a.next;而不是change(a),现在您的a.data将是2 .

关于java - 关于java按值传递的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474486/

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