为什么switch
表达式不允许在Java语言中使用long
、float
、double
或boolean
?为什么只允许int
(以及自动升级到int
的那些)?
发布于 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
,我没有一个解释。在我看来,这样的特性也许应该在设计语言时就包括在内。
发布于 2011-02-28 20:19:46
在执行一些基于状态变量的操作时,通常会使用switch-case结构。在这里,int有足够的选项。布尔型只有两个,所以正常的if通常就足够好了。以这种方式使用双精度和浮点数并不是很准确。
坦率地说,我不能想象这个东西的用例,你对这个问题有什么实际的问题吗?
https://stackoverflow.com/questions/5141830
复制相似问题