为什么switch表达式不允许在Java语言中使用long、float、double或boolean?为什么只允许int (以及自动升级到int的那些)?
发布于 2011-02-28 20:17:53
即使可以使用浮点数和双精度数,使用它们也会很笨拙--不要忘记,由于表示的性质,在浮点数/双精度数上执行精确的相等匹配通常不是一个好主意。
对于布尔值,为什么不直接使用if呢?
老实说,我不记得我曾经想过要打开这些类型中的任何一种。您的脑海中是否有特定的用例?
发布于 2011-02-28 20:21:02
您可以在switch语句中使用enum,Java7将添加String AFAIK。switch语句来自C,在C中只允许int类型,而实现其他类型则更加复杂。
浮点数不是一个很好的切换候选者,因为精确比较经常被舍入误差破坏。例如,0.11 - 0.1 == 0.01为false。
打开布尔值用处不大,因为普通if语句会更简单
if(a) {
} else {
}将不会更简单,因为
switch(a) {
case true:
break;
case false:
break;
}顺便说一句:我会使用开关(长),如果它是可用的,但它不是。无论如何,这对我来说是一个罕见的用例。
发布于 2011-02-28 20:19:43
对于浮点数、双精度浮点数和双精度浮点数,我假设他们由于与why it's a bad idea to compare them using ==相同的原因而省略了它。
对于布尔型,这可能只是因为它无论如何都会对应于一条if语句。请记住,在case-expression中只能有常量,所以case总是与if (someBool)和if (!someBool)相对应。
对于long,我没有一个解释。在我看来,这样的特性也许应该在设计语言时就包括在内。
https://stackoverflow.com/questions/5141830
复制相似问题