安卓:变量在 while 循环中值不正确

在 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;
    }
}

执行测试应用时的输出为:

value before = 23
value in while loop = 0

而结果应该是

value in while loop = 23

调试时,结果符合预期(“while 循环中的值 = 23”),但在常规调试版本中,这是错误的。主活动类的拆解代码看起来不错,变量“value”的值在 while 循环体的末尾设置为 0。当 while 循环体中的某些代码或函数使用变量“value”时,它将具有值 0 而不是 23。在测试用例中,我使用 Log 语句来简化。

当我改变行时没有出错

value = 0;

if (value == 23) {
    value = 0;
}

或者当我删除该行时

value = 0; 

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


答案 1

如果您真的确定编写的代码可以正常工作,那么从现在开始,您必须开始检查(订购):

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

也许你必须提供有关你的环境的一些细节,比如Java版本,Android min版本,操作系统或你正在使用的IDE。

我希望这些子弹能让你有一些正确的联想来解决你的问题。


答案 2

我无法重现这个例子。我总是得到(运行和调试配置):

value before = 23
value in while loop = 23

我刚刚在我的Android Studio中创建了一个新项目,并使用SDK版本28编译了它。然后,我只是在模拟器(使用API 26)中运行该项目,一切都按预期工作。


推荐