当前位置: 首页 > 面试题库 >

Java为什么您的switch语句数据类型不能很长?

东郭淇
2023-03-14
问题内容

这是Sun
Java教程
的摘录:

一种开关用的工作原理byteshortchar,和int原始数据类型。它还与枚举类型(在类和继承讨论)和少数特殊类作品是“包装”某些基本类型:CharacterByteShort,和Integer(在简单的数据对象讨论)。

long不允许原始数据类型是有充分理由的。有人知道这是什么吗?


问题答案:

我认为在某种程度上,这可能是基于开关的典型用法的任意决定。

切换基本上可以通过两种方式(或原则上是组合)来实现:对于少数情况或值分散的情况,切换本质上等同于临时变量上一系列if的等效项(开启的值仅需评估一次)。对于数量或多或少连续的中等数量的情况,使用切换表(Java中的TABLESWITCH指令),从而在表中有效地查找要跳转到的位置。

这些方法中的任何一种原则上都可以使用长值而不是整数。但是我认为,平衡指令集和编译器的复杂性与实际需求可能只是一个实际的决定:真正需要长时间切换的情况很少见,因此可以将其重写为系列IF语句,或以其他方式工作(如果所讨论的长值彼此靠近,则可以在Java代码中切换减去最小值的int结果)。



 类似资料:
  • 问题内容: 为什么下面的代码: 给出错误: 在循环外继续 问题答案: 失败是switch语句的标准行为,因此,在switch语句中使用Continue没有意义。Continue语句仅在for / while / do..while循环中使用。 根据我对您意图的理解,您可能想写: 我还建议您将默认条件放在最后。 编辑:continue语句不能在switch语句中使用并不完全正确。(带有理想标记的)

  • 我正在编写一个简单的游戏,在其中我使用一个枚举,CommandManager,来存储关于可能的命令以及每个命令的作用的信息。此枚举的主要目的是能够打印出可用命令的菜单,以及用于检查输入并执行与该输入相关的操作。我的问题在于第二次使用,我使用switch语句根据用户的输入确定用户想要做什么。当尝试使用枚举的属性(通过getter方法)作为案例标签时,我遇到了一个编译错误。提供的错误消息是,大小写表达

  • 问题内容: 此功能是否将在以后的Java版本中使用? 有人可以解释为什么我不能这样做吗,就像Java 语句起作用的技术方式一样? 问题答案: 带有案例的switch语句已在Java SE 7中实现,至少在首次提出要求后的 16年。没有提供延迟的明确原因,但可能与性能有关。 在JDK 7中实现 现在,该功能已 通过“脱糖”过程实现。在声明时使用常量的干净,高级语法在编译时扩展为遵循模式的更复杂的代码

  • 问题内容: 在 Java 7中 ,对象可以位于语句的表达式中。有人可以从官方文档中解释以下声明吗? 与使用链式if-then-else语句相比,Java编译器通常从使用 String对象的 switch语句生成更有效的字节码。 问题答案: Java代码 具有一个类的两个版本,例如 与: 与: 字节码 让我们看一下字节码。获取版本的字节码: 获取版本的字节码: 结论 在第一个版本中,通过为每个条件调

  • 所以,实际上我对Java编程语言还是新手,并且还在学习如何转换数据类型,所以在这种情况下,我很难将字节转换为短字节。你们能帮帮我吗?? 所以在这种情况下,我可以正常地从(int)转换为(long)数据类型,因为(long)数据大小大于(int)。这与我尝试将其从(short)转换为(int)时的情况相同。但为什么我不能使用这个概念将数据类型从(byte)转换为(short)??即使(短)数据大小大