この例を考えると:
public static void main(final String[] args) {
final List<String> myList = Arrays.asList("A", "B", "C", "D");
final long start = System.currentTimeMillis();
for (int i = 1000000; i > myList.size(); i--) {
System.out.println("Hello");
}
final long stop = System.currentTimeMillis();
System.out.println("Finish: " + (stop - start));
}
vs
public static void main(final String[] args) {
final List<String> myList = Arrays.asList("A", "B", "C", "D");
final long start = System.currentTimeMillis();
final int size = myList.size();
for (int i = 1000000; i > size; i--) {
System.out.println("Hello");
}
final long stop = System.currentTimeMillis();
System.out.println("Finish: " + (stop - start));
}
これは何か違いがありますか?私のマシンでは、2番目のマシンの方がパフォーマンスが速いようですが、本当に正確かどうかはわかりません。コンパイラはこのコードを最適化しますか?ループ条件が不変オブジェクト(文字列配列など)の場合、彼はそうするだろうと思います。