简体   繁体   English

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

[英]Strange behavior in do/while statement on Galaxy S5 and Android 5.1.1

I face strange behavior of do/while statement on Galaxy S5 and Android 5.1.1. 我在Galaxy S5和Android 5.1.1上遇到了do / while语句的奇怪行为。 If you have any information, let me know. 如果您有任何信息,请告诉我。

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);

If I will run the program on Galaxy S5 with Android 5.1.1, output log is as follows. 如果我将使用Android 5.1.1在Galaxy S5上运行程序,输出日志如下。

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

If I will run the same program on other device or other o/s version, output is as follows. 如果我将在其他设备或其他o / s版本上运行相同的程序,输出如下。

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
  • If we convert the code to while or for statement, the issue does not occur. 如果我们将代码转换为while或for语句,则不会发生此问题。
  • If we make a own log library with sync file i/o, the issue occur. 如果我们使用同步文件i / o创建自己的日志库,则会出现问题。
  • Does not occur on Galaxy S4 and S6 or Android 5.0.2. 在Galaxy S4和S6或Android 5.0.2上不会出现。

Probably not the answer you're looking for, but just as a test (because I'm curious): - declare i as final, and assign it a 0 value. 可能不是你正在寻找的答案,但只是作为一个测试(因为我很好奇): - 声明我是最终的,并为它分配一个0值。 - remove the increment statements for i. - 删除i的增量语句。

If you're getting the same answer then: 1. You have i declared somewhere else as 2. 2. You've discovered a bug. 如果您得到相同的答案,那么:1。您已将其他地方声明为2. 2.您发现了一个错误。

Also, does the issue occurs if you declare i as Integer instead of int? 此外,如果您将i声明为Integer而不是int,是否会出现问题? There's something to be learned here.. 这里有一些东西需要学习......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM