切换声明报价

时间:2014-08-08 15:52:46

标签: java switch-statement

借助Java,我正在阅读一本书来重新涵盖我在大学时忘记的基础知识,并且他们向我展示了如此简短的陈述:

void helpon(int what) {
    switch(what) {
        case '1': break;
        case '2': break;
    }
}

我省略了案例代码,因为无关紧要。

然而,使用int并且仍然用单引号括起case语句似乎很奇怪,所以我去了oracle docs并找到了一个与上面例子相同的例子,但没有引号。

引用是否对使用整数作为案例的switch语句很重要?如果'1'whatint是个字符,那么为什么'1'会有效?

4 个答案:

答案 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。