借助Java,我正在阅读一本书来重新涵盖我在大学时忘记的基础知识,并且他们向我展示了如此简短的陈述:
void helpon(int what) {
switch(what) {
case '1': break;
case '2': break;
}
}
我省略了案例代码,因为无关紧要。
然而,使用int
并且仍然用单引号括起case语句似乎很奇怪,所以我去了oracle docs并找到了一个与上面例子相同的例子,但没有引号。
引用是否对使用整数作为案例的switch语句很重要?如果'1'
是what
而int
是个字符,那么为什么'1'
会有效?
答案 0 :(得分:15)
单引号字符是文字char
s,char
值属于int
值。 char
可以从其UTF-16值表示为int
,例如:
char c = '1';
int i = c;
System.out.println(i);
输出:
49
更多信息:
不要混淆ASCII字符(单字节,0到127之间的值)和UTF-16(每个代码点2个字节,0到65535之间的值)。更多信息:Unicode, UTF, ASCII, ANSI format differences
答案 1 :(得分:3)
我只想补充一些深度。是的' 1'是1的char,它存储为int valu e,这就是为什么你可以在char声明中使用int(单引号是另一种方法)。但是,char存储为最大值为65,535的范围(Java是utf-16,我相信2 ^ 16)。如果不进行强制转换,则不能在char中使用负int值,并且转换将产生奇数字符。大于该范围的值是个问题。
一个开关将采用以下int,char,short,byte(适合int的任何东西)和SE7一个String。基本上,原语和String对象是可以接受的。您可以将基元转换为对象,如整数,字符,短;字节。
从技术角度来说,只要你检查正确的东西,就可以在范围内使用int或在案例中使用char。
使用int时,应该使用任何自动适合int的东西。在switch参数中进行转换会导致精度损失。
为了好的措施,不要忘记打破或者你会失败。此外,case语句必须是在编译时可确定的常量,可以是已知和可接受原语的算术,使用final修饰符的已知原语,或直接编码常量。
答案 2 :(得分:1)
chars'1'&这种护理中的'2'被解释为其UTF-16值。所以'1'实际上被评估为49,'2'被评估为50,依此类推。
我需要更多的代表来发布图片,但这是一个ASCII代码图表。 http://asciiset.com/asciitable.gif
答案 3 :(得分:0)
char
将转换为UTF-16,然后进行比较。此外,在Java7之后,您还可以在交换机情况下编写String。