Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Executable Statements in If Statements [closed]

Tags:

java

There is an explanatory code of what I'm trying to ask. Sureley, the difference between the codes below is ignorable, yet it describes the point.

Which one is the most efficient in terms of memory usage and performance?

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

or

double angleSin = MathUtil.CalculateSin(angle);

if( angleSin > Angles.ACUTE){
// Something is done
}
like image 584
Alpaslan Avatar asked May 10 '26 07:05

Alpaslan


2 Answers

It simply depends if you are going to re-use the variable.

  • If yes, use the second case.
  • If no use the first case.

There is no reason to store the value in a variable if you are not going to re-use it.

Edit :

As per your comment, it seems you are mostly asking this question for performance concern...

Actually my question is not about the algorithm nor the way I implement it. I'm curious about the memory usage of the approaches, therefore efficiency is the purpose.

Don't expect any difference in term of memory usage for both approaches, the JVM and JIT will optimize it as much as possible so that both case become the same.

like image 138
Jean-François Savard Avatar answered May 12 '26 20:05

Jean-François Savard


To extend the other answers, you should also consider readability of your code. In this case, the meaning of MathUtil.CalculateSin(angle) is pretty obvious. However, if you have a more complex condition, it would be a good idea to precompute that condition, give the variable a meaningful name and then use the variable in the if-statement.

In your case it also depends on the context of the if-statement. Again, MathUtil.CalculateSin(angle) > Angles.ACUTE is quite easy to grasp at a glance. However,

final boolean angleIsAcute = (MathUtil.CalculateSin(angle) > Angles.ACUTE);
if(angleIsAcute) { ... }

would carry the meaning better. In this case, of course, both possibilities are quite similar, but I hope you see where I am going with this.

Do not worry about the overhead that is introduced by storing that extra variable. Even though the java-compiler does not optimize your code, any JVM worth its salt will optimize the bytecode and the performance overhead will be negligible.

like image 37
Alexander Weinert Avatar answered May 12 '26 22:05

Alexander Weinert



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!