gpt4 book ai didi

java - 在子方法中创建新对象显然不会传递引用

转载 作者:行者123 更新时间:2023-12-01 18:41:51 25 4
gpt4 key购买 nike

我目前正在开发一个java项目,该项目实现了dijkstra算法。我有一些与此类似的代码

    public static void main(String[] args){
Graph myGraph = null;
execute(myGraph);
}

private static void execute(Graph graph){
while(!quit){
doCommand(graph);
}}


doCommand(Graph graph){
if(command == n){
graph = new Graph(size); }}

在我的程序中,我可以输入一些命令,例如 n 5 ,这意味着程序应该创建一个包含 5 个节点的新图。现在我的问题是,输入例如 n 5 后,它仍然为空。在我看来, myGraph 应该在 n 命令之后收到一个新的引用,但显然它没有,我不明白为什么。顺便说一句,行 graoh = new Graph(size);肯定是被执行了。这不是错误。

最佳答案

Java 不允许您重新设置引用,因为它是通过传递的。这意味着引用也是通过传递的。当您执行 graph = new Graph(size) 时,您所做的就是使本地引用(这是从 main 传入的引用的副本)指向新的Graph 的实例。 main 内的 graph 仍然是 null

解决方法可能是让 doCommand 返回 Graph 的实例,或者使用 Graph 的静态实例(因为看起来您的所有方法都是静态方法)。另一种选择是将 graph 作为属性封装在其他类中,这意味着该类中的所有方法都可以访问它。

关于java - 在子方法中创建新对象显然不会传递引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668804/

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