java - 通过引用递归传递对象? java

标签 java recursion pass-by-reference pass-by-value

所以我有一个算法,迫使我递归地传入一个对象作为参数,并在不同的递归深度上设置对象的值。问题是 Java 不允许我这样做,因为它们按值传递或其他东西只是让我感到困惑。如何确保传入的对象保留设置的值?

最佳答案

在 Java 中,您永远不会将对象作为参数传递。您可以传递引用或原始值。参数始终按值传递。 Java 根本没有引用传递。

如果您要传递对对象的引用,并且希望确保您调用的代码不会更改该对象内的数据,您的选择是:

  • 创建一个副本并传入对该副本的引用
  • 首先让您的类型不可变。

编辑:只是为了说清楚,如果您有:

Foo f = new Foo();

那么f的值不是一个Foo对象。它是对 Foo 对象的引用。如果您现在调用:

doSomething(f);

然后将f 的值复制为doSomething 中参数的原始值。这种行为基本上就是值传递的定义。 doSomething 无法改变 f 的值 - 之后它仍然会引用同一个对象。该对象内的数据可能已更改,但它不会是不同的对象。

打个比方:如果我给你一份我的地址副本,你可以去粉刷前门,但你无法改变我住的地方。

关于java - 通过引用递归传递对象? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848312/

相关文章:

javascript - Node.js V8 通过引用传递

c# - 将 C# 移植到 javascript 会导致范围问题

java - 更新Android Studio 3.2后,布局文件夹未显示layouts.xml文件

java - 指定 AWS Cloudwatch 日志客户端的凭证

java - liquibase 中的 SQL 文件从未执行过

java - JDBC - 通信错误(MySQL + Netbeans)

c# - 异步递归方法

c - 反转链表并打印结果

计算嵌套根常数的Java程序

c++ - 如何在 C++ 中通过引用传递指针