switch表达式不能是float,double或boolean
为什么switch
表达式不允许在Java中使用long
, float
, double
或boolean
值? 为什么只允许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。