给定以下方法:
public int methodOne() {
int total = local_int_one + local_int_two;
return total;
}
public int methodTwo() {
return local_int_one + local_int_two;
}
1)上述方法的唯一区别是可读性还是在methodTwo()中有微优化的"好处"?
2)在可能的情况下,是否应该避免和避免在狭窄范围内定义局部变量?(如果在一条语句中必须执行多个计算,我可以看到methodTwo变得不可读)
简短的回答是:methodTwo()
稍微更有效率。
methodOne()
产生以下字节码:
public int methodOne();
0 aload_0 [this]
1 getfield com.example.Test.local_int_one : int [13]
4 aload_0 [this]
5 getfield com.example.Test.local_int_two : int [15]
8 iadd
9 istore_1 [total]
10 iload_1 [total]
11 ireturn
这是methodTwo()
的字节码:
public int methodTwo();
0 aload_0 [this]
1 getfield com.example.Test.local_int_one : int [13]
4 aload_0 [this]
5 getfield com.example.Test.local_int_two : int [15]
8 iadd
9 ireturn
但是请注意,这个优化太小了,在这种情况下代码的可读性比几个java指令重要得多。如果您认为临时变量将有助于代码的可读性,那么,无论如何,使用它。