Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最好使用变量或始终调用方法?_Java_Performance - Fatal编程技术网

Java 最好使用变量或始终调用方法?

Java 最好使用变量或始终调用方法?,java,performance,Java,Performance,我有一个返回对象的方法,我需要多次调用两个方法。所有这些都必须写入已执行的操作事件中 你认为哪一个是更好的解决方案?哪一个消耗的资源更少,速度更快 public void actionPerformed(ActionEvent e) { Object obj1 = getObject().getSomething1(); Object obj2 = getObject().getSomething2(); doSomething1(obj1); doSomet

我有一个返回对象的方法,我需要多次调用两个方法。所有这些都必须写入已执行的操作事件中


你认为哪一个是更好的解决方案?哪一个消耗的资源更少,速度更快

public void actionPerformed(ActionEvent e) { 
    Object obj1 = getObject().getSomething1();
    Object obj2 = getObject().getSomething2();

    doSomething1(obj1);
    doSomething2(obj2);
    doSomething3(obj1);
}
或者更好

public void actionPerformed(ActionEvent e) {
    doSomething1(getObject().getSomething1());
    doSomething2(getObject().getSomething2());
    doSomething3(getObject().getSomething1());
}

我想说的是,计算机程序员在没有得到提示的情况下决不应该担心这件事。你应该始终关注那些更具可读性的内容


如果您运行代码时遇到性能问题,则返回并检查是否存在显著的性能差异。无论如何,我相信你找不到。现代编译器非常擅长优化这样的东西

就性能而言,它主要取决于
getSomething1()
处理。如果未执行计算或轻计算,则两种方法的性能应大致相同。
如果处理更繁重,可能会有一些差异,但仍然取决于在应用程序框架中执行的调用次数

除了在您的案例中实际上不是问题的性能之外,您还应该首先关注其他领域,例如潜在的副作用和代码质量。
副作用:该方法是否产生了您不想重复的副作用? 在这种情况下,请确保只调用一次。
代码质量:通常应避免代码重复,第二次重复也应避免,但同时也应避免引入比要求更多的变量。那么哪条路更好呢?我认为我们应该用一种或另一种方式来论证整个代码

请注意,您还可以通过引入接受对象的方法来选择第三个选项:它避免了重复,并限制了声明变量的数量:

doSomething(getObject());

private void doSomething(Foo foo){
   foo.getSomething1();
   foo.getSomething2();
   foo.getSomething1();
}

这是基于意见的。不过我要说,在许多情况下,我更喜欢将中间数据存储在变量中。它使调试变得更容易,因为您可以只检查变量的值。不过,就程序的操作而言,我希望在大多数情况下它们都能优化为相同的代码。我相信编译器会将第一个版本转换为第二个版本,因此运行时性能不会受到影响。第一个问题是:“哪一个消耗的资源更少,速度更快?”。问题是还有多少资源,速度有多快,这是否真的很重要。@Varonton我对此不太确定。我怀疑java编译器是否能够在没有副作用的情况下识别方法,从而对这些方法调用执行CSE。@Varonton不,编译器肯定不会;JIT可能,只是,如果在一段时间后,它可以解决缺乏副作用的问题。对于那些将这个答案标记为删除的人来说。答案可以改写为,哪个更好,哪个你觉得更可读。这是一个完全正确的答案。