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

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

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

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

EN

回答 3

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用户

发布于 2011-02-28 20:19:46

在执行一些基于状态变量的操作时,通常会使用switch-case结构。在这里,int有足够的选项。布尔型只有两个,所以正常的if通常就足够好了。以这种方式使用双精度和浮点数并不是很准确。

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

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

https://stackoverflow.com/questions/5141830

复制
相关文章

相似问题

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