Ошибочные циклы for в Java?

Я заметил ошибочное поведение при выполнении следующего java-кода:

public class Prototype {
  public static void main(String[] args) {
    final int start = Integer.MAX_VALUE/2;
    final int end = Integer.MAX_VALUE;
    {
      long b = 0;
      for (int i = start; i < end; i++) {
        b++;
      }
      System.out.println(b);
    }
    {
      long b = 0;
      for (int i = start; i < end; i++) {
        b++;
      }
      System.out.println(b);
    }
  }
}

Оба цикла работают точно так же. Тем не менее, второй выводит недетерминированное ошибочное значение. Я запускаю код в Linux, используя Версия:

java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)

Пример вывода:

1073741811
141312

Вы можете воспроизвести его? Это ошибка?

Изменить: Странно

final int end = Integer.MAX_VALUE - 1;

работает нормально.

23
задан Björn Pollex 9 August 2011 в 11:36
поделиться