1

我正在考虑创建以下方法:

public static MyBigCollection doSomeStuff(MyBigCollection m) { ... return m; }

然后在另一个方法中(可能在另一个类中),像这样使用它:

MyBigCollection mbc = new MyBigCollection();
mbc = stuffClass.doSomeStuff(mbc);

我是否以正确的方式进行此操作-这是对对象“做一些事情”的有效方法吗?为了可扩展性,我想中断这些东西。我做 c# 这么久了,我只是不确定 java。在 c# 中,该方法可以返回 void,我可以简单地调用 doSomeStuff(mbc) - 这将有效地通过引用传递我的对象并对它做一些事情。我一直在阅读 java 的工作方式不同,所以我想在这里咨询专家。

4

4 回答 4

2

只有一种方法可以传递 Java 对象。Java 通过值传递所有内容。对象不通过;他们住在堆上。你传递引用,而不是对象。

据我所知,与 C# 相同。

这种微优化通常是没有意义的。

于 2012-10-25T02:03:58.770 回答
2

我会重构为:

stuffClass.doSomeStuff(mbc);

(即修改mbc并返回void的方法)

请记住,所有 Java 对象都存储在堆内存中,并通过引用指针传递。

于 2012-10-25T01:47:21.117 回答
2

你这样做的方式很好,但你实际上并不需要return方法结束时的对象。因此,以下会更简单......

MyBigCollection mbc = new MyBigCollection();
stuffClass.doSomeStuff(mbc);

Java 中的对象是通过引用传递的,因此方法中对mbcObject 的任何修改在方法调用结束后doSomeStuff()仍将保留在变量中。mbc

return您可能考虑使用Object的唯一原因mbc是,如果您希望能够将多个方法连接在一起,例如这个......

MyBigCollection mbc = new MyBigCollection();
mbc.doStuff1().doStuff2().doStuff3();

在这种情况下,因为mbc每个doStuff()方法都返回了,所以可以直接调用下一个方法返回到同一个对象。如果没有return参考,你必须做这样的事情......

MyBigCollection mbc = new MyBigCollection();
mbc.doStuff1();
mbc.doStuff2();
mbc.doStuff3();

这是同一件事,但不是那么紧凑。你如何去做真的取决于你打算如何使用方法和对象本身。

于 2012-10-25T01:47:32.330 回答
1

我认为您的问题是关于 Java 如何将引用传递给对象。Java 是按值传递的,这在第一次说时可能会令人困惑。对于对象,这意味着对象的引用值被传递给方法。与该值引用的对象交互将改变“传入”的对象,因此您无需返回它。

字符串的处理方式不同,因为它们是不可变的。基元也是按值传递的,但由于传递的值不是引用,因此您不会更改原始变量。

测试这一点的最简单方法是编写一些代码并观察(您也可以考虑 Java 教程)

于 2012-10-25T01:51:17.607 回答