实际上我认为这是编译器的编译器优化技术.我不认为它是“Java行为”,它是我们正在谈论的特定Java编译器的行为.
Java自身的行为在Java语言规范中指定,而for-loop specification没有指定int或long类型变量的优化.
对于当前的“官方”编译器,它可能会或可能不会在将来优化长类型的增量变量.
——————————–优化实验
我运行了以下两个程序:
计划1(永远运行):
public static void main( String[] args )
{
long counter = 0L;
int j;
for( int i = 0 ; i <= 1000000000 /* 9 zeros */ ; i++ )
for( j = 0 ; j <= 1000000000 /* 9 zeros */ ; j++ )
counter++;
System.out.println( "Finished" + counter);
}
计划2(立即完成):
public static void main( String[] args )
{
long counter = 0L;
int j;
for( int i = 0 ; i <= 1000000000 /* 9 zeros */ ; i++ )
for( j = 0 ; j <= 1000000000 /* 9 zeros */ ; j++ )
counter++;
System.out.println( "Finished");
}
因此,编译器会检测嵌套循环外是否有任何可见的更改,如果没有,它基本上会跳过内部循环.