给定以下代码,在Switch-case语句中,'a'(char类型)是否自动提升为int类型?
void testSwitch(byte x) {
switch(x) {
case 'a': // 1
case 256: // 2
default: // 3
case 1: // 4
}
}
我找不到Java SE7是否提到了这一点。。
提前感谢您的澄清。
你好,丹尼尔
是的Switch语句将生成表开关或lookupSwitch原语,其常量通常根据此常量提升为int
http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html
为什么Java API使用int而不是short或byte?
下面是语言规范中提到的内容。参见本节开关语句:
给定switch语句,必须满足以下所有条件,否则会发生编译时错误:
>
...
这意味着缩小转换将应用于char
value'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