Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:变量在while循环中的值不正确_Java_Android_Optimization_Runtime Error_Samsung Mobile - Fatal编程技术网

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

Java Android:变量在while循环中的值不正确,java,android,optimization,runtime-error,samsung-mobile,Java,Android,Optimization,Runtime Error,Samsung Mobile,在Android Studio中开发Android应用程序时,while循环中使用的变量值不正确。我在一个测试案例中将其简化为一个非常简单的案例: 在Android Studio中创建一个新项目,空白活动 将以下代码添加到主活动中 方法onStart: @Override public void onStart() { super.onStart(); int count = 2; int index = 1; int value = 23; Log

在Android Studio中开发Android应用程序时,while循环中使用的变量值不正确。我在一个测试案例中将其简化为一个非常简单的案例:

  • 在Android Studio中创建一个新项目,空白活动
  • 将以下代码添加到主活动中
  • 方法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 in while loop = 23
    
    调试时,结果与预期一致(“while循环中的值=23”),但在常规调试生成中,结果是错误的。主活动类的反汇编代码看起来正常,while循环体末尾的变量“value”的值设置为0。当while循环体中的某些代码或函数使用变量“value”时,其值将为0,而不是23。在测试用例中,我使用Log语句来简化

    我换线的时候不会出错

    value = 0;
    
    value = 0; 
    

    或者当我拆下线路时

    value = 0;
    
    value = 0; 
    

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

    如果您确实确定编写的代码正确工作,那么从现在开始,您必须开始检查(按顺序):

    • 配置-->对于Java版本、JDK或Java版本与使用过的Android库兼容,您的项目配置完全正常吗?您的Java和ANDROID库配置是否正确
    • 环境-->调试模拟器是第三方库还是调试设备是调试代码的有效设备?您的编码操作系统是否与ide、Java版本或Android库兼容
    • JVM-->您是否尝试过使用正确的Java jdk源卸载并重新安装您正在使用的版本
    也许您必须提供一些有关您的环境的详细信息,如Java版本、Android min版本、操作系统或您正在使用的IDE


    我希望这些要点能为您提供一些正确的关联,以解决您的问题。

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


    我刚刚在Android Studio中创建了一个新项目,并使用SDK版本28进行了编译。然后我在emulator中运行了这个项目(使用API 26),一切正常。

    这实际上取决于您特定的Java版本,最重要的是,取决于特定的JVM。但是,是的,Java进行优化,JVM进行运行时优化,循环展开可以是优化之一。例如,请看这里:.@paulsm4将代码输出从23更改为0是非法的优化。需要发生的事情是明确的。您可以在纸上跟踪代码,您将看到23是您可以在纸上打印的唯一值。只允许在没有明显效果的情况下对指令进行重新排序。Idk,但我以前在三星Galaxy S5s上看到过这种情况。没有其他设备受到影响。我猜三星把他们的优化搞砸了。“我从来没有抽出时间来进一步调查,因为我没有这种类型的手机要测试(只有几个游戏商店的bug报告)@joshgoldeneagle我检查了for循环,它也有同样的问题。”。有解决办法,这不是问题所在。但是问题是,这个问题正在损害正常的执行流程,这是非常危险的,因为你没有预料到。谢谢你的评论。以@zapl为例,可以确认存在真正的优化错误,至少在一些三星手机中是这样。在执行优化时,执行流不应以改变代码语义的方式进行更改。如果有人知道如何联系三星,那么请让我知道。
    value before = 23
    value in while loop = 23