给出以下方法:
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指令重要得多。
如果您认为临时变量将有助于提高代码的可读性,那么请务必使用它。