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

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

即使它们是可能的,浮点数和双精度也难以可靠地使用 – 不要忘记,由于表示的性质,无论如何在float / double上执行精确的相等匹配通常都是一个坏主意。

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

老实说,我不记得曾经想要打开这些类型中的任何一种。 你有特定的用例吗?

您可以在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),但不是。 对我来说这是一个罕见的用例。

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

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

对于float和double float和double我会假设他们已经省略了它,原因与为什么使用==比较它们是个坏主意 。

对于布尔值,它可能只是因为它无论如何都会对应于if语句。 请记住,你只能在case-expression中有常量,所以case总是对应if (someBool)if (!someBool)

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