给出以下方法:

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指令重要得多。

如果您认为临时变量将有助于提高代码的可读性,那么请务必使用它。

10-06 03:21