Android:变量在while循环中具有不正确的值

Hie*_*lko 18 java optimization android runtime-error samsung-mobile

在Android Studio中开发Android应用时,while循环中使用的变量的值不正确.我在测试用例中将它减少到一个非常简单的情况:

  1. 在Android Studio中创建一个新项目,空白活动
  2. 将以下代码添加到主活动

方法onStart:

@Override
public void onStart() {
    super.onStart();

    int count = 2;
    int index = 1;

    int value = 23;

    Log.i("test", "value before = " + value);
    while (index < count) {
        Log.i("test", "value in while loop = " + value);
        index++;
        value = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

执行测试应用程序时的输出是:

value before = 23
value in while loop = 0
Run Code Online (Sandbox Code Playgroud)

而结果应该是

value in while loop = 23
Run Code Online (Sandbox Code Playgroud)

在调试时,结果如预期的那样('while while = 23'中的值),但在常规的调试版本中,它是错误的.主活动类的反汇编代码看起来没问题,变量'value'的值在while循环体的末尾设置为0.当while循环体中的某些代码或函数使用变量'value'时,它将具有值0而不是23.在测试用例中,我使用Log语句来简化.

当我改变线路时,它不会出错

value = 0;
Run Code Online (Sandbox Code Playgroud)

if (value == 23) {
    value = 0;
}
Run Code Online (Sandbox Code Playgroud)

或当我删除该行

value = 0; 
Run Code Online (Sandbox Code Playgroud)

所以它看起来像一些优化错误.但是做了什么优化可能导致这种情况?它使代码不可靠.

Bah*_*mir 1

如果你确实确定编写的代码可以正确运行,那么从现在开始,你必须开始检查(有序):

  • 配置 --> 您的项目配置与 Java 版本、jdks 完全一致吗?或者 Java 版本是否与使用的 Android 库兼容?您的 Java 和 Andorid 库配置正确吗?
  • 环境 --> 您的调试模拟器是第 3 方库,还是您的调试设备是调试代码的有效设备?您的编码操作系统与您的 ide、Java 版本或 Android 库兼容吗?
  • JVM --> 您是否尝试卸载并使用您正在使用的版本的正确 Java jdk 源重新安装?

也许您必须提供有关您的环境的一些详细信息,例如 Java 版本、Android 最低版本、操作系统或您正在使用的 IDE。

我希望这些要点能让您产生一些正确的联想来解决您的问题。