使用内联对象方法调用与声明新变量

时间:2013-11-01 21:58:03

标签: c# java oop

我一直在使用Java和C#一段时间了,我一直在问自己这个问题,但是我没有找到我想要的答案。

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

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

我到处都看到这种代码,所以我在考虑一线调用(下面的示例)是否表现出不同的性能或仅仅是标准的缘故?

这就是我对一线电话的意思:

new MyClass().nonStaticMethod();

4 个答案:

答案 0 :(得分:7)

表现可能会相同。

然而,像new MyClass().nonStaticMethod();这样的调用通常会产生代码味道 - 对象封装了什么状态,只需要调用它上面的方法? (即为什么这不是静态方法?)

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

答案 1 :(得分:2)

我会选择第一种方式,即

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

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

答案 2 :(得分:2)

如果查看生成的字节代码,可以证明性能与其他任何东西完全没有区别。除非您使用的是应丢弃的局部变量。

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

当面对这样的问题时,你应该首先考虑什么是最简单和最清晰的,因为优化器寻找标准模式,如果你编写令人困惑的代码,你不仅会混淆自己和其他人,还会混淆优化器和结果更容易变慢。

答案 3 :(得分:1)

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

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