当前位置: 首页 > 知识库问答 >
问题:

在switch语句中是否自动提升byte、short和char?

皇甫智明
2023-03-14

给定以下代码,在Switch-case语句中,'a'(char类型)是否自动提升为int类型?

void testSwitch(byte x) {
    switch(x) {
       case 'a':   // 1
       case 256:   // 2
       default:   //  3
       case 1:    //  4
    }

}

我找不到Java SE7是否提到了这一点。。

提前感谢您的澄清。

你好,丹尼尔

共有2个答案

叶鸿振
2023-03-14

是的Switch语句将生成表开关或lookupSwitch原语,其常量通常根据此常量提升为int

http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html

为什么Java API使用int而不是short或byte?

敖子安
2023-03-14

下面是语言规范中提到的内容。参见本节开关语句:

给定switch语句,必须满足以下所有条件,否则会发生编译时错误:

>

...

这意味着缩小转换将应用于charvalue'a'。它的数值97可表示为byte。然而,值256不合适,因此编译器会抛出错误。

 类似资料:
  • 请考虑以下代码 它将在屏幕上打印24。 现在假设我在枚举中有更多的值,并且我定义了类特征的所有相应模板特化。 备注: 我必须使用它的情况要复杂得多,自动操作会非常有帮助。 使用switch语句对我来说很重要,因为可以实现速度(速度对我的应用程序至关重要)。 谢谢! null > 在我的实际应用程序中,枚举包含几乎50个不同的值,它将在将来被扩展(希望由其他人扩展)。枚举包含连续值。 类“trait

  • 问题内容: 我知道在每种情况下/ 语句都会自动中断。我想知道以下代码: 是否声明退出循环或只是块? 问题答案: Break语句,《 Go编程语言规范》。 “ break”语句终止最里面的“ for”,“ switch”或“ select”语句的执行。 如果有标签,则必须是封闭的“ for”,“ switch”或“ select”语句的标签,并且该标签的执行终止(§For语句,§Switch语句,§

  • 问题内容: 我想知道为什么在计算表达式或按位运算时将和提升为值的原因? 问题答案: 因为Java语言规范是这样说的。第5.6.1节定义了用于撤消某些运算符的一元数值提升,并指出: 如果操作数的编译时类型为byte,short或char,则通过扩展基元转换(第5.1.2节)将其提升为int类型的值。 关于二进制数值运算符(“ binary”表示具有两个操作数,如“ +”的运算符)的评估的第5.6.2

  • 问题内容: 我对对象使用开关盒有疑问: 例如:我的问题可以用Java复制: 如何使用实施? 问题答案: 这是子类型多态性有帮助的典型方案。请执行下列操作 然后,你可以简单的调用上。 如果你不能随意更改,和,则可以应用访问者模式来实现相同目的。

  • switch 语句可以替代多个 if 判断。 switch 语句为多分支选择的情况提供了一个更具描述性的方式。 语法 switch 语句有至少一个 case 代码块和一个可选的 default 代码块。 就像这样: switch(x) { case 'value1': // if (x === 'value1') ... [break] case 'value2':

  •  使用 switch 语句可以更简洁地实现 if ~ else if 的结构。格式如下。 switch(base_expression) { casecondition_expression1: casecondition_expression2: : : default: : : }  写在 base_expression 位置的表达式会在刚开始时被求值。switch 后面的语句块中的 case