Java 调用一个方法并传递一个对象引用,然后用相同的引用捕获返回

Java 调用一个方法并传递一个对象引用,然后用相同的引用捕获返回,java,methods,parameter-passing,return-value,Java,Methods,Parameter Passing,Return Value,我有一个初学者的问题。我搜索了很多答案,但似乎找不到确切的答案,所以也许有更有经验的开发人员可以帮我解决这个问题 那么,假设您在代码中有以下情况(这是该情况的简化版本): 现在我听到一些人说,将对象的引用传递给方法并捕获返回值是一种糟糕的编码实践。不幸的是,没有人能确切地向我解释为什么这是一种糟糕的编码实践,而我对原因的搜索却一无所获。有人能解释为什么这样做是不好的做法吗?我想不出这方面会出现什么问题 提前感谢,你们这些善良的人已经无数次地帮助我回答其他人的问题,这是我第一次真正需要发布一个问题

我有一个初学者的问题。我搜索了很多答案,但似乎找不到确切的答案,所以也许有更有经验的开发人员可以帮我解决这个问题

那么,假设您在代码中有以下情况(这是该情况的简化版本):

现在我听到一些人说,将对象的引用传递给方法并捕获返回值是一种糟糕的编码实践。不幸的是,没有人能确切地向我解释为什么这是一种糟糕的编码实践,而我对原因的搜索却一无所获。有人能解释为什么这样做是不好的做法吗?我想不出这方面会出现什么问题


提前感谢,你们这些善良的人已经无数次地帮助我回答其他人的问题,这是我第一次真正需要发布一个问题:)

在你们展示的场景中,没有太多明显的好处。然而,根据我的经验,作为一种模式,它可能是有用的——特别是如果该方法执行验证的话

番石榴的方法就是一个很好的例子。这意味着我可以编写如下代码:

public class Player {
    private final String name;

    public Player(String name) {
        this.name = Preconditions.checkNotNull(name);
    }
}
。。。而不必拆分分配和验证。它还允许验证作为另一个调用的一部分存在,例如对另一个构造函数:

super(Preconditions.checkNotNull(name));

我不认为这是一种“坏习惯”,特别是如果你喜欢不可变的对象,那么返回值有什么必要呢。。当我们实际上不需要它的时候???你所说的“捕捉”返回值是什么意思?如果你能解释一下为什么你要返回原来的论点,那会很有用。请注意,您的示例代码无法编译,因为您正试图将未初始化的变量(
a1
)传递到该方法中。@Newbie为了说明这一点,您必须手动创建新实例,以防出现不可变对象。JVM不会手动执行此操作。好吧,我看不出有任何情况会导致问题,如果您返回作为参数提供的相同实例(在可变对象的情况下)。可能是其他人在这种情况下遇到了问题。你可以举个真实的例子吗?上面的一个节目毫无用处。这次返回和分配有什么意义?如果将方法切换为void,会有什么变化?好吧,那么您的意思是,如果使用正确,在不可变的情况下,编写这样的代码没有什么错。此外,正如您上面提到的模式,它在简化方面有一定的好处(我猜checkNotNull返回传递给它的内容,即使在本例中它是一个不可变的对象,我们将获得一个对新对象的引用,而不是我们传递的对象)。很抱歉,这些问题听起来可能很愚蠢,但我只是从Java开始,希望从一开始就掌握扎实的基础知识。@Newbie:在您的示例中,您没有获得对新对象的引用。您返回的引用与传入的引用相同。听起来您对Java中引用和对象的工作方式也有一些误解。当引用被传递到方法中时,没有任何东西会自动创建对象的副本…是的,很抱歉我在谈论你的示例,但将其与我在另一篇文章中读到的内容相混淆@Newbie:正如那里的许多答案所说,引用是复制的,而不是对象。仅在这个问题中理解这一点:zText+=“foo”;因此创建了一个新字符串,并且在该方法外部看不到更改,但这对我的问题没有影响。对不起,这里偏离了轨道。
super(Preconditions.checkNotNull(name));