哪个是最佳的?

Har*_*ish 4 java performance loops

在循环中声明一个变量是好的还是在Java中最优化地声明.在声明循环内部时是否还涉及任何性能成本?

例如.

选项1:循环外

List list = new ArrayList();
int value;

//populate list
for(int i = 0 ; i < list.size(); i++) {
  value = list.get(i);
  System.out.println(“value is ”+ value);
}
Run Code Online (Sandbox Code Playgroud)

选项2:循环内部

List list = new ArrayList();

//populate list
for(int i = 0; i < list.size(); i++) {
  int value = list.get(i);
  System.out.println(“value is ”+ value);
}
Run Code Online (Sandbox Code Playgroud)

Asa*_*aph 12

Clean Code中,Robert C. Martin建议Java编码人员尽可能地将变量声明为使用它们的位置.变量的范围不应超过必要的范围.将变量的声明接近其使用位置有助于为读者提供类型和初始化信息.不要过分关注性能,因为JVM非常擅长优化这些东西.而是专注于可读性.

顺便说一句:如果您使用的是Java 5或更高版本,则可以使用以下new-for-Java-5功能显着修改代码示例:

  • foreach构造
  • 仿制药
  • 自动装箱

我重构了你的例子以使用上述新功能.

List<Integer> list = new ArrayList<Integer>();

// populate list

for (int value : list) {
    System.out.println("value is " + value);
}
Run Code Online (Sandbox Code Playgroud)

  • 我同意,总是选择易读性而不是性能 - 直到你进入优化阶段,此时你将对所有东西进行计时,你会发现这种明显的优化对底线没有任何影响.我经常看到"循环外"的方法而且非常讨厌它. (3认同)