Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 If语句中的可执行语句_Java - Fatal编程技术网

Java If语句中的可执行语句

Java If语句中的可执行语句,java,Java,我想问的问题有一个解释代码。Sureley,下面代码之间的差异是可以忽略的,但它描述了这一点 哪一个在内存使用和性能方面最有效 if( MathUtil.CalculateSin(angle) > Angles.ACUTE){ // Something is done } 或 这取决于您是否要重复使用该变量 如果是,请使用第二种情况 如果没有,请使用第一种情况 如果不打算重复使用,则没有理由将该值存储在变量中 编辑: 根据你的评论,似乎你问这个问题主要是出于性能考虑

我想问的问题有一个解释代码。Sureley,下面代码之间的差异是可以忽略的,但它描述了这一点

哪一个在内存使用和性能方面最有效

if( MathUtil.CalculateSin(angle) > Angles.ACUTE){
     // Something is done
    }


这取决于您是否要重复使用该变量

  • 如果是,请使用第二种情况
  • 如果没有,请使用第一种情况
如果不打算重复使用,则没有理由将该值存储在变量中

编辑:

根据你的评论,似乎你问这个问题主要是出于性能考虑

实际上,我的问题不是关于算法,也不是我的方式 实施它。我很好奇这些方法的内存使用情况, 因此,效率是目的


不要期望这两种方法在内存使用方面有任何差异,JVM和JIT将尽可能地优化它,使这两种情况变得相同。

引用确实占用内存。所以,如果您不打算在任何其他地方使用
角度,那么第二个选项就是您应该选择的。此外,它不会污染名称空间。这就是人们将
Comparator
作为匿名类而不是创建新类的原因之一。如果它们不需要在其他地方使用。

扩展其他答案,还应该考虑代码的可读性。在本例中,
MathUtil.CalculateSin(angle)
的含义非常明显。但是,如果您有一个更复杂的条件,最好预先计算该条件,给变量一个有意义的名称,然后在
if
-语句中使用该变量

在您的情况下,它还取决于
if
-语句的上下文。同样,
MathUtil.CalculateSin(angle)>Angles.ACUTE也很容易一目了然。但是,

final boolean angleIsAcute = (MathUtil.CalculateSin(angle) > Angles.ACUTE);
if(angleIsAcute) { ... }
会更好地表达意思。当然,在这种情况下,这两种可能性是非常相似的,但我希望你能看到我的想法


不要担心存储额外变量会带来的开销。即使java编译器没有优化您的代码,任何值得一试的JVM都会优化字节码,性能开销可以忽略不计。

即使在代码后面不需要变量时,我也经常使用第一种模式。其优点是便于调试

  • 在调试器中单步执行代码时,可以检查和更改变量的值
  • 如果在语句右侧的调用中发生异常,则有时会比将调用嵌入到
    If
    或作为另一个调用的参数时更清楚发生了什么

  • 如果您担心变量的内存使用,请不要担心。信任编译器优化掉它知道以后不会使用的变量。如果您声明变量
    final
    ,它将被积极优化。

    这取决于您是否要在其他地方使用
    angleSin
    。在这种情况下,选项1。第一种方法更好,因为它将临时变量
    angleSin
    的范围限制为
    If(…)
    。也许这个问题应该在@bigdestroyer中,不,对不起。代码太短了。代码审查是为了审查工作代码,而不是询问最佳实践。这个问题可能会被关闭,因为它提供了示例代码。即使我们没有将“MathUtil.CalculateSin(angle)”分配给变量,结果是否会占用内存(与变量完全相同)?因为所有答案都一致认为内存使用不会有任何不同,使用一个变量进行调试就足够了。嗯said@Kevin在大多数IDE中,您也可以在单步执行语句时检查语句。在变量选项卡中直接查看变量,而不是选择语句并单击“执行语句”查看结果。我认为第一种方法更简单、更有用。@ChetanKinger当鼠标悬停在
    if
    语句中嵌入的调用上时,你看到它的值了吗?我在Eclipse中没有注意到这一点,但我必须注意它。你的评论启发我补充说,如果值在它自己的语句中,你也可以更改它。@KevinCondon我很少发现自己调试应用程序,因为我编写了全面的单元测试。我不喜欢声明变量的想法,因为我懒得突出显示语句并检查(eclipse特性。快捷键为Ctrl+I)它的结果。:)。尽管如此,我并不反对你。如果您发现自己多次调试应用程序,那么变量可能会有所帮助。尽管如此,此更改只应暂时用于调试。另一种方法是使用实用程序方法创建实用程序类,例如
    isangelacute(双角度)
    ,以便在应用程序中重复使用此类比较。但是+1的可读性优势,其他答案没有涵盖。我也同意可读性胜于微优化(即使在这种情况下没有),但OP在评论中澄清,他对效率的目的很好奇。这仍然是一个很好的答案,因为我认为开发人员必须记住,微优化并不总是一个好主意。然而,我更喜欢@ChetanKinger提出的替代方法来考虑可重用性。我完全同意您的实施建议。我只是从零开始编写了这段代码,以便演示我的观点。不过我很感谢你的努力。如果我在我的示例中使用了布尔方法,那么就更难解释了。
    final boolean angleIsAcute = (MathUtil.CalculateSin(angle) > Angles.ACUTE);
    if(angleIsAcute) { ... }