【发布时间】:2014-08-05 19:16:45
【问题描述】:
以下所有三种方法在功能上都是相同的 - 但是它们都有我认为的风格差异。当这些被编译时,编译器会以不同的方式对待它们吗? (我缺乏检查和理解反编译字节码的知识)
// Method 1
private boolean isAcceptableRange(final int a, final int b) {
if ((Math.abs(a - b)) <= range) {
return true;
} else {
return false;
}
}
// Method 2
private boolean isAcceptableRange(final int a, final int b) {
if ((Math.abs(a - b)) <= range) {
return true;
}
return false;
}
// Method 3
private boolean isAcceptableRange(final int a, final int b) {
if ((Math.abs(a - b)) <= range)
return true;
return false;
}
我最初的想法是 #1 将是独一无二的,因为额外的 else 子句,其中 #2 和 #3 最终将是相同的。这意味着在优化磁盘/ROM 空间效率和可能的指令效率(考虑嵌入式)时,请使用选项 #2 或 #3。
还是编译器知道最终结果并“优化”掉它?
【问题讨论】:
-
您可以使用
javap -c查看字节码。 -
我仍然建议使用
return (Math.abs(a - b)) <= range;而不是您的三个变体中的任何一个。
标签: java compiler-construction jvm javac bytecode