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

我在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 + ","[test do-while 4] i = " + i + ",j = " + j);
    j++;
    Log.d(TAG,"[test do-while 5] i = " + i + ",j = " + j);
} while (j < 5);

如果我将使用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

如果我将在其他设备或其他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

>如果我们将代码转换为while或for语句,则不会发生此问题.
>如果我们使用同步文件i / o创建自己的日志库,则会出现问题.
>在galaxy S4和S6或Android 5.0.2上不会出现.

解决方法

可能不是你正在寻找的答案,但只是一个测试(因为我很好奇):
– 将i声明为final,并为其赋值0.
删除i的增量语句.

如果您得到相同的答案,那么:
你把别的地方宣布为2.
你发现了一个错误.

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...