首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >switch表达式不能是浮点型、双精度或布尔型

switch表达式不能是浮点型、双精度或布尔型
EN

Stack Overflow用户
提问于 2011-02-28 20:15:34
回答 4查看 78.2K关注 0票数 37

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

EN

回答 4

Stack Overflow用户

发布于 2011-02-28 20:17:53

即使可以使用浮点数和双精度数,使用它们也会很笨拙--不要忘记,由于表示的性质,在浮点数/双精度数上执行精确的相等匹配通常不是一个好主意。

对于布尔值,为什么不直接使用if呢?

老实说,我不记得我曾经想过要打开这些类型中的任何一种。您的脑海中是否有特定的用例?

票数 38
EN

Stack Overflow用户

发布于 2011-02-28 20:21:02

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

浮点数不是一个很好的切换候选者,因为精确比较经常被舍入误差破坏。例如,0.11 - 0.1 == 0.01为false。

打开布尔值用处不大,因为普通if语句会更简单

代码语言:javascript
复制
if(a) {

} else { 

}

将不会更简单,因为

代码语言:javascript
复制
switch(a) {
  case true:

     break;
  case false:

     break;
}

顺便说一句:我会使用开关(长),如果它是可用的,但它不是。无论如何,这对我来说是一个罕见的用例。

票数 9
EN

Stack Overflow用户

发布于 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,我没有一个解释。在我看来,这样的特性也许应该在设计语言时就包括在内。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5141830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档