传递Java对象的最有效方法是什么?

时间:2012-10-25 01:44:32

标签: java oop methods reference

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

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

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

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

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

4 个答案:

答案 0 :(得分:2)

我会重构:

stuffClass.doSomeStuff(mbc);

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

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

答案 1 :(得分:2)

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

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

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

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

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

在这种情况下,由于每个mbc方法返回doStuff(),因此可以直接将同一个对象调用下一个方法。没有return引用,你必须做这样的事情......

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

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

答案 2 :(得分:2)

只有一种方式来传递Java对象。 Java按值传递所有内容。对象没有通过;他们住在堆里。您传递引用,而不是对象。

据我所知,与C#相同。

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

答案 3 :(得分:1)

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

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

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

相关问题