6

我使用 Java 和 C# 已经有一段时间了,我一直在问自己很多次,但一直没有找到我想要的答案。

当我必须调用一个对象方法时(这意味着它不是静态的),我必须通过类的实例来使用调用,例如:

MyClass myInstance = new MyClass();
myInstance.nonStaticMethod();

我到处都看到这种代码,所以我在想如果单行调用(下面的示例)在性能方面表现不同,还是只是为了标准?

这就是我所说的单线电话

new MyClass().nonStaticMethod();
4

4 回答 4

7

性能可能是相同的。

但是,调用new MyClass().nonStaticMethod();通常会散发出代码的味道——对象封装了什么状态,而您只需要调用其上的方法?(即为什么那不是静态方法?)

编辑:我并不打算说它总是不好的——在某些情况下,鼓励使用这样的习语(例如在流畅的构建器对象的情况下)——但你会注意到,在这些情况下,生成的对象在某些情况下仍然很重要方法。

于 2013-11-01T22:03:11.150 回答
2

我会选择第一种方式,即

MyClass myInstance = new MyClass();
myInstance.nonStaticMethod();

第二个的问题new MyClass().nonStaticMethod(); 是,如果你想从同一个对象调用另一个方法,你别无选择。你唯一能做的就是每次都new MyClass().nonStaticMethod1();创建一个。new object恕我直言,我认为他们中的任何一个都不会比另一个表现更好。在缺乏性能提升的情况下,我肯定会选择一个更清晰易懂的,因此我的选择。

于 2013-11-01T22:01:24.173 回答
2

如果您查看生成的字节码,您可以证明性能或其他任何内容都没有什么不同。除非您使用的是应该丢弃的局部变量。

除非您已经测量出您有性能问题,否则您应该假设您没有,并且猜测性能问题可能出在哪里,无论您有多少性能优化 Java 应用程序的经验。

面对这样的问题,你首先应该考虑什么是最简单最清楚的,因为优化器会寻找标准模式,如果你编写混乱的代码,你不仅会混淆自己和他人,还会混淆优化器,而且更结果可能会变慢。

于 2013-11-01T22:01:58.580 回答
1

假设您不再需要访问对象的实例,则没有区别。做任何你喜欢的。

当然,如果您以后想对该对象执行任何其他操作,则需要在变量中使用它。

于 2013-11-01T22:02:31.033 回答