安卓循环优化的艺术缺陷。具有意外结果的简单java函数
编辑: 经过几个小时的测试,我可以说这是一个带有for循环的Android运行时的严重缺陷 昨天我在游戏中发现了一个小故障,调试代码时发现一个非常简单的java函数得到了意想不到的结果(取决于设备的Android版本)。 这是java代码:安卓循环优化的艺术缺陷。具有意外结果的简单java函数,java,android,android-6.0-marshmallow,dalvik,android-5.1.1-lollipop,Java,Android,Android 6.0 Marshmallow,Dalvik,Android 5.1.1 Lollipop,编辑: 经过几个小时的测试,我可以说这是一个带有for循环的Android运行时的严重缺陷 昨天我在游戏中发现了一个小故障,调试代码时发现一个非常简单的java函数得到了意想不到的结果(取决于设备的Android版本)。 这是java代码: // Simple function to count items of a 6 rows pyramid (1+2+3+4+5+6) private int getSum () { int sum=0, x=0; for (int i=0;
// Simple function to count items of a 6 rows pyramid (1+2+3+4+5+6)
private int getSum ()
{
int sum=0, x=0;
for (int i=0; i<6; i++) { x++; sum+=x; }
return sum; // always should return 21
}
如果你的Android是5.1.1或6.0.x,它将显示15(错误结果),如果它是以前的Android版本,它将返回21(确定结果)
拜托,有人能做这个简单的测试吗。我对这件事很生气 如果您一步一步地调试代码,那么它将返回正确的值(21)。如果您试图跟踪代码,它也会返回21个值。 例如:
private int getSum2()
{
整数和=0,x=0;
对于(int i=0;我在jellybean和棒棒糖设备中进行了测试,两次我都得到了21个。非常感谢!可能是棉花糖问题(?)请,有人能在Android 6.0.x中做这个简单的测试吗?谢谢。是的@Daviddev我在Android 6.0.1中测试了它的功能15。非常奇怪。谢谢@Raghavendra!我认为这是一个非常严重的错误。它可能有很多不想要的行为。我打开了一个问题(),但仍然没有回复。
Log.d("@@@ Test", "getSum=" + getSum());
private int getSum2 ()
{
int sum=0, x=0;
for (int i=0; i<6; i++) { x++; Log.d ("@@@ Test","x="+x); sum+=x; }
return sum; // always should return 21
}