java开关表达式不能是float、double或boolean 2 周,1 日 Questions & Answers 78582 为什么switch表达式不允许Java中的long、float、double或boolean值?为什么只允许int(以及那些自动升级为int)的
# 1 楼答案 在基于状态变量执行某些操作时,通常使用switch-case结构。一个int有足够多的选项。布尔值只有两个,所以一个正常的if通常就足够了。在这种情况下,双打和浮球并没有那么精确 坦白地说,我无法想象这种东西的使用案例,你有没有考虑过这个问题的一些实际问题
# 2 楼答案 您可以在switch语句中使用enum,Java7将添加字符串AFAIK。switch语句来自C,其中只允许int,实现其他类型更为复杂 浮点数并不是一个很好的切换工具,因为精确的比较常常被舍入错误打破。e、 g.0.11 - 0.1 == 0.01为假 打开布尔值并没有多大用处,因为普通的if语句会更简单 if(a) { } else { } 这对我来说再简单不过了 switch(a) { case true: break; case false: break; } 顺便说一句:我会使用开关(长),如果它是可用的,但它不是。无论如何,这对我来说都是一个罕见的用例
# 3 楼答案 即使可能,Float和double也难以可靠地使用-不要忘记,由于表示的性质,对Float/double执行精确的相等匹配通常是个坏主意 对于布尔值,为什么不从if开始呢 老实说,我不记得曾经想要打开这些类型中的任何一种。您是否考虑了特定的用例
# 4 楼答案 对于float和double float和double,我假设它们省略了它,原因与why it's a bad idea to compare them using ^{}相同 对于boolean,这可能只是因为它无论如何都会对应于一个if语句。请记住,case表达式中只能有常量,因此case始终对应于if (someBool)和if (!someBool) 我没有任何解释。在我看来,在设计语言时,这种特性也许应该包括在内
# 1 楼答案
在基于状态变量执行某些操作时,通常使用switch-case结构。一个int有足够多的选项。布尔值只有两个,所以一个正常的if通常就足够了。在这种情况下,双打和浮球并没有那么精确
坦白地说,我无法想象这种东西的使用案例,你有没有考虑过这个问题的一些实际问题
# 2 楼答案
您可以在switch语句中使用
enum
,Java7将添加字符串AFAIK。switch语句来自C,其中只允许int,实现其他类型更为复杂浮点数并不是一个很好的切换工具,因为精确的比较常常被舍入错误打破。e、 g.
0.11 - 0.1 == 0.01
为假打开布尔值并没有多大用处,因为普通的
if
语句会更简单这对我来说再简单不过了
顺便说一句:我会使用开关(长),如果它是可用的,但它不是。无论如何,这对我来说都是一个罕见的用例
# 3 楼答案
即使可能,Float和double也难以可靠地使用-不要忘记,由于表示的性质,对Float/double执行精确的相等匹配通常是个坏主意
对于布尔值,为什么不从
if
开始呢老实说,我不记得曾经想要打开这些类型中的任何一种。您是否考虑了特定的用例
# 4 楼答案
对于float和double float和double,我假设它们省略了它,原因与why it's a bad idea to compare them using ^{} 相同
对于boolean,这可能只是因为它无论如何都会对应于一个
if
语句。请记住,case表达式中只能有常量,因此case始终对应于if (someBool)
和if (!someBool)
我没有任何解释。在我看来,在设计语言时,这种特性也许应该包括在内