在每次调用compareTo时是否都会进行新的比较,如果是构造,还是进行了单个比较?
public void genericComparisons(Comparable e, Comparable target){
if(e.compareTo(target) == 0)
// do this
else if(e.compareTo(target) > 0)
// do something else
else if(e.compareTo(target) < 0)
// do that
} // end method发布于 2014-09-27 20:37:54
显然可以使用局部变量优化它..。这样的优化总是好的,因为它可以使代码更清晰、更少重复。
但是,假设您的compareTo是一个简单的无副作用的方法,JVM可能会内联它,并且可以为您进行这种优化。我想这就是你真正想知道的。
找出它是不容易的,特别是使用println必须失败,因为JVM可以使您的程序更快,但没有不同的行为。您无法在字节码中看到它,因为这根本不包含优化,它们是在程序运行一段时间时发生的。
JVM也不允许改进编码风格,所以我建议使用局部变量,特别是对于更复杂的表达式。
你的最后一个条件显然是永远正确的,当达到。如果您希望代码系统地、对称地看上去,请使用以下代码
public void genericComparisons(Comparable e, Comparable target) {
int cmp = e.compareTo(target);
if (cmp < 0) {
// less
} else if (cmp > 0) {
// greater
} else {
// same
}
}https://stackoverflow.com/questions/26077682
复制相似问题