switch表达式不能是float,double或boolean

时间:2011-02-28 12:15:34

标签: java switch-statement

为什么switch表达式不允许Java中的longfloatdoubleboolean值?为什么只允许int(以及自动提升为int的那些)?

4 个答案:

答案 0 :(得分:29)

即使可能,浮点数和双精度也难以可靠使用 - 不要忘记在float / double上执行完全相等的匹配通常是一个坏主意,因为表示的性质。

对于布尔值,为什么不使用if来开始?

我不记得永远想要打开任何这些类型,说实话。你有特定的用例吗?

答案 1 :(得分:4)

您可以在switch语句中使用enum,Java 7将添加String AFAIK。 switch语句来自C,其中只允许使用int并且实现其他类型更复杂。

浮点数不适合交换机,因为精确比较通常会因舍入错误而中断。例如0.11 - 0.1 == 0.01是假的。

开启布尔值没什么用,因为普通的if语句会更简单

if(a) {

} else { 

}

不会更简单

switch(a) {
  case true:

     break;
  case false:

     break;
}
顺便说一下:如果可用,我会使用switch(long),但不是。对我来说这是一个罕见的用例。

答案 2 :(得分:1)

对于float和double float以及double,我假设他们已将其省略,原因与why it's a bad idea to compare them using ==相同。

对于布尔值,它可能只是因为它无论如何都会对应if语句。请记住,您只能在case-expression中使用常量,因此案例总是对应if (someBool)if (!someBool)

long我没有解释。在我看来,在设计语言时可能应该包含这样的功能。

答案 3 :(得分:1)

通常在基于状态变量执行某些操作时使用switch-case结构。有一个int有足够的选项。布尔只有两个所以正常如果通常足够好。双打和花车并不是那么准确,以这种方式使用。

坦率地说,我无法想象这个问题的用例,你对这个问题有什么实际问题吗?