切换报表报价

2022-09-03 01:57:02

使用Java,我正在读一本书来重新覆盖我在大学里忘记的基础知识,他们向我展示了一个像这样的swtich语句:

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

我省略了大小写代码,因为无关紧要。

但是,对我来说,使用一个并且仍然将case语句包装在单引号中似乎很奇怪,所以我去了oracle文档并找到了一个与上面示例相同的示例,但没有引号。int

引号对于使用整数作为大小写的 switch 语句是否重要?如果 是 和 是 字符,为什么会工作?'1'whatint'1'


答案 1

单引号字符是文字 s,值落在值中。A 可以表示为其 UTF-16 值的 a,例如:charcharintcharint

char c = '1';
int i = c;
System.out.println(i);

输出:

49

更多信息:


不要混淆 ASCII 字符(单字节,值从 0 到 127)和 UTF-16(每个码位 2 个字节,值从 0 到 65535)。详细信息:Unicode、UTF、ASCII、ANSI 格式差异


答案 2

我只想增加一些深度。是的,'1'是1的char,它被存储为int value,这就是为什么你可以在char声明中使用int(单引号是另一种方法)。但是,char存储为最大为65,535的范围(Java是utf-16,我相信是2 ^ 16)。在没有强制转换的情况下,char 中不能有负的 int 值,并且转换将产生一个奇怪的字符。大于范围的值是一个问题。

开关将采用以下 int,char,short,byte(任何适合 int 的内容),而 SE7 将采用字符串。基本上,基元和 String 对象是可以接受的。您可以将基元转换为对象,例如整数,字符,短;字节。

从技术上讲,对于char,只要您检查正确的东西,您就可以在范围内使用int或char。

对于 int,应该使用任何自动适合 int 的东西。开关参数中的转换会导致精度损失。

为了更好地衡量,不要忘记打破,否则你会摔倒。此外,case 语句必须是可在编译时确定的常量,可以是已知和可接受基元的算术、使用最终修饰符的已知基元或直接编码的常量。