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

时间:2016-02-11 20:23:08

标签: java switch-statement type-promotion

鉴于以下代码, &#39; <#em> (类型为 char )会自动提升为int类型在 switch-case 声明?

var refresh = setInterval(tijd, 1000);

function tijd(){
  var d1 = new Date(),
      minutes = d1.getMinutes().toString().length == 1 ? '0'+d1.getMinutes() : d1.getMinutes(),
      hours = d1.getHours().toString().length == 1 ? '0'+d1.getHours() : d1.getHours();
  return hours+ ':' +minutes;
  document.getElementById("tijd1").innerHTML = d1;
}

}

我无法找到Java SE7是否会提到这一点......

提前感谢您的澄清。

此致 丹尼尔

2 个答案:

答案 0 :(得分:7)

以下是语言规范提到的内容。见this section on switch statements

  

给定switch语句,以下所有内容必须为true或发生编译时错误:

     
      
  • switch语句关联的每个案例常量必须与switch语句的表达式(第5.2节)的类型兼容。

  •   
  • ...

  •   

表示缩小转化将适用于char'a'。其97的数值可表示为byte。但是值256不适合编译器会抛出错误。

答案 1 :(得分:0)

是的,switch语句将生成带有常量的tableswitch或lookupswitch原语,这些常量通常根据此提升为int

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

Why does the Java API use int instead of short or byte?