在Java中是否完全没有办法将对象本身传递给方法,因此它实际上会被更改?

Ton*_*ark -1 java parameters methods

class MetaData {
    public String version;
    public String compression;
}
Run Code Online (Sandbox Code Playgroud)

我创建一个MetaData对象,将其传递给方法,并从方法中填充版本和压缩字段.我希望这些更改在方法的生命周期之外存在.在C++中,我认为我添加了一个&或者其他东西来传递对象本身而不是它的副本到该方法.有没有在Java中做同样的事情?

Bre*_*ode 17

这总是发生在Java中.这就是Java的工作方式.当您将"MetaData"对象传递给方法时,将传递对该对象的引用,并且应该随处可见对其"版本"和"压缩"字段所做的任何修改.

查看本文以获得真正深入的解释:

http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html


Vin*_*lds 5

Java已经通过值语义传递.这并不意味着对象通过值传递给方法.相反,它意味着对对象的引用通过值传递给方法.

因此,在这种情况下,当您创建MetaData对象并将其传递给填充字段的方法时,对该对象的引用将传递给该方法.方法返回后,您可以检查调用方中的对象引用以确认其字段已设置.

顺便说一句,如果您要将MetaData对象发送到另一个类来设置对象的状态,那么这在OOP中是一种不好的做法.对象本身应该掌控自己的状态.