运行此代码
var myValue1:int = 2;
switch (myValue1)
{
case -3: trace(myValue1 + " == -3"); break;
case -2: trace(myValue1 + " == -2"); break;
case -1: trace(myValue1 + " == -1"); break;
case 0: trace(myValue1 + " == 0"); break;
case 1: trace(myValue1 + " == 1"); break;
case 2: trace(myValue1 + " == 2"); break;
case 3: trace(myValue1 + " == 3"); break;
default: trace(myValue1 + " is unknown"); break;
}
var myValue2:int = -2;
switch (myValue2)
{
case -3: trace(myValue2 + " == -3"); break;
case -2: trace(myValue2 + " == -2"); break;
case -1: trace(myValue2 + " == -1"); break;
case 0: trace(myValue2 + " == 0"); break;
case 1: trace(myValue2 + " == 1"); break;
case 2: trace(myValue2 + " == 2"); break;
case 3: trace(myValue2 + " == 3"); break;
default: trace(myValue2 + " is unknown"); break;
}
给出这个输出:
2 == 0
-2 is unknown
(用Flash Builder 4.7.0.349722编译,运行在Flash 11.5.502.149上。运行在Windows 7 SP1,Firefox 18.0.2中)
以下更改都修复了上述问题,并给出了正确的输出:
Number
...case
。case
语句使用int
---变量而不是文字...除非这些变量也是const
在这种情况下。改变myValue2 = -1
给出输出-1 == -3
,这也是同样的意思。
很明显这是个bug但是...是什么原因造成的?是否有一些微妙的细微差别int
或者我不明白的负数?我的代码有错吗?或者这只是FlashBuilder中字节码编译器的一个问题?
发布于 2018-02-05 09:12:32
内存管理方面的错误。这也可能与硬件有关。我认为一些“不可见的”条件是满足的,例如执行操作的顺序(您可以尝试在var声明和开关之间放置一些虚拟代码,或者可能将var值赋值多几次。只是为了‘启动内存’),它与容易出错的编译器结合在一起,就会使内存寻址混乱,而您的开关认为它包含两个整数,而在现实中,它得到的值与内存不同。
发布于 2018-02-05 09:15:58
您可能可以通过将原始值转换为字符串并将您的情况转换为字符串值来强制编译器的操作。
switch( String(value) )
{
case "-3": /*do something*/; break;
case "-2": /*do something*/; break;
case "-1": /*do something*/; break;
case "0": /*do something*/; break;
case "1": /*do something*/; break;
case "2": /*do something*/; break;
case "3": /*do something*/; break;
default: break;
}
发布于 2018-02-05 10:16:19
这只是Flash Builder中字节码编译器的一个问题。
https://stackoverflow.com/questions/-100007317
复制相似问题