Java Galaxy S5和Android 5.1.1上do/while语句中的奇怪行为

Java Galaxy S5和Android 5.1.1上do/while语句中的奇怪行为,java,android,Java,Android,在Galaxy S5和Android 5.1.1上,我面临do/while语句的奇怪行为。如果你有任何信息,请告诉我 int i = 0; int j = 0; do { Log.d(TAG, "[test do-while 1] i = " + i + ", j = " + j); i = 0; Log.d(TAG, "[test do-while 2] i = " + i + ", j = " + j); i++; Log.d(TAG, "[test

在Galaxy S5和Android 5.1.1上,我面临do/while语句的奇怪行为。如果你有任何信息,请告诉我

int i = 0;
int j = 0;

do {
    Log.d(TAG, "[test do-while 1] i = " + i + ", j = " + j);
    i = 0;
    Log.d(TAG, "[test do-while 2] i = " + i + ", j = " + j);
    i++;
    Log.d(TAG, "[test do-while 3] i = " + i + ", j = " + j);
    i++;
    Log.d(TAG, "[test do-while 4] i = " + i + ", j = " + j);
    j++;
    Log.d(TAG, "[test do-while 5] i = " + i + ", j = " + j);
} while (j < 5);
如果我将在其他设备或其他o/s版本上运行相同的程序,输出如下

D/MainActivity( 9856): [test do-while 1] i = 2, j = 0
D/MainActivity( 9856): [test do-while 2] i = 2, j = 0
D/MainActivity( 9856): [test do-while 3] i = 2, j = 0
D/MainActivity( 9856): [test do-while 4] i = 2, j = 0
D/MainActivity( 9856): [test do-while 5] i = 2, j = 1
D/MainActivity( 9856): [test do-while 1] i = 2, j = 1
D/MainActivity( 9856): [test do-while 2] i = 2, j = 1
D/MainActivity( 9856): [test do-while 3] i = 2, j = 1
D/MainActivity( 9856): [test do-while 4] i = 2, j = 1
D/MainActivity( 9856): [test do-while 5] i = 2, j = 2
D/MainActivity( 9856): [test do-while 1] i = 2, j = 2
D/MainActivity( 9856): [test do-while 2] i = 2, j = 2
D/MainActivity( 9856): [test do-while 3] i = 2, j = 2
D/MainActivity( 9856): [test do-while 4] i = 2, j = 2
D/MainActivity( 9856): [test do-while 5] i = 2, j = 3
D/MainActivity( 9856): [test do-while 1] i = 2, j = 3
D/MainActivity( 9856): [test do-while 2] i = 2, j = 3
D/MainActivity( 9856): [test do-while 3] i = 2, j = 3
D/MainActivity( 9856): [test do-while 4] i = 2, j = 3
D/MainActivity( 9856): [test do-while 5] i = 2, j = 4
D/MainActivity( 9856): [test do-while 1] i = 2, j = 4
D/MainActivity( 9856): [test do-while 2] i = 2, j = 4
D/MainActivity( 9856): [test do-while 3] i = 2, j = 4
D/MainActivity( 9856): [test do-while 4] i = 2, j = 4
D/MainActivity( 9856): [test do-while 5] i = 2, j = 5
D/MainActivity( 9515): [test do-while 1] i = 0, j = 0
D/MainActivity( 9515): [test do-while 2] i = 0, j = 0
D/MainActivity( 9515): [test do-while 3] i = 1, j = 0
D/MainActivity( 9515): [test do-while 4] i = 2, j = 0
D/MainActivity( 9515): [test do-while 5] i = 2, j = 1
D/MainActivity( 9515): [test do-while 1] i = 2, j = 1
D/MainActivity( 9515): [test do-while 2] i = 0, j = 1
D/MainActivity( 9515): [test do-while 3] i = 1, j = 1
D/MainActivity( 9515): [test do-while 4] i = 2, j = 1
D/MainActivity( 9515): [test do-while 5] i = 2, j = 2
D/MainActivity( 9515): [test do-while 1] i = 2, j = 2
D/MainActivity( 9515): [test do-while 2] i = 0, j = 2
D/MainActivity( 9515): [test do-while 3] i = 1, j = 2
D/MainActivity( 9515): [test do-while 4] i = 2, j = 2
D/MainActivity( 9515): [test do-while 5] i = 2, j = 3
D/MainActivity( 9515): [test do-while 1] i = 2, j = 3
D/MainActivity( 9515): [test do-while 2] i = 0, j = 3
D/MainActivity( 9515): [test do-while 3] i = 1, j = 3
D/MainActivity( 9515): [test do-while 4] i = 2, j = 3
D/MainActivity( 9515): [test do-while 5] i = 2, j = 4
D/MainActivity( 9515): [test do-while 1] i = 2, j = 4
D/MainActivity( 9515): [test do-while 2] i = 0, j = 4
D/MainActivity( 9515): [test do-while 3] i = 1, j = 4
D/MainActivity( 9515): [test do-while 4] i = 2, j = 4
D/MainActivity( 9515): [test do-while 5] i = 2, j = 5
  • 如果我们将代码转换为while或for语句,则不会出现问题
  • 如果我们使用同步文件i/o创建自己的日志库,则会出现问题
  • 不会出现在Galaxy S4和S6或Android 5.0.2上

    • 可能不是你想要的答案,但只是一个测试(因为我很好奇): -声明i为final,并为其赋值0。 -删除i的increment语句

      如果你得到了相同的答案,那么: 1.我在别的地方申报了2。 2.你发现了一个bug

      另外,如果将i声明为整数而不是int,是否会出现问题?
      这里有一些东西需要学习

      您是否能够在另一台运行Snapdragon 801处理器(如S5)的设备上进行测试?(见附件)。这可能是一个优化问题。您是否可以尝试使用相同的代码,将
      i
      j
      声明为
      volatile int
      s?…这很可能是优化中的一个错误。它似乎将“log”移到“j++”之前。