在Java中打开非Ints

Ada*_*dam 4 java

我在查找Java中交换机的内部工作时遇到了麻烦我告诉我,对于所有原语,该值都被提升为Integer.

但是,在下面的示例中,我正在测试一个字节变量,任何大于127的情况都不会编译:

byte k = 5;
switch(k){
  case 128:    //fails to compile, possible loss of precision  
Run Code Online (Sandbox Code Playgroud)

我意识到这是一个错误,并没有问题.我的问题是:
如果JVM采用"k"的值并在测试每个案例之前将其提升为整数,那么JVM如何跟踪它是否正在切换一个字节?

Pau*_*aul 9

switch声明并不局限于int.Java语言规范(JLS),第14.11节,switch语句,陈述

Expression的类型必须是char,byte,short,int,Character,Byte,Short,Integer或枚举类型,否则会发生编译时错误.

byte因此,你不会晋升为int.JLS继续说你正在做的将导致编译时错误:

与switch语句关联的每个case常量表达式必须可分配给switch表达式的类型.

...因为128不能分配给a byte.