所以我有一个算法,迫使我递归地传入一个对象作为参数,并在不同的递归深度上设置对象的值。问题是 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/