带有字符和ascii值的开关大小写在java中的行为相同

带有字符和ascii值的开关大小写在java中的行为相同,java,char,switch-statement,ascii,Java,Char,Switch Statement,Ascii,带ascii值或字符的开关盒的行为如何相同 case如何在内部将ascii转换为char或char转换为ascii public class Rq200_150 { public static void main(String[] args) { for (Character cRef = 'A'; cRef < 'F'; cRef++) switch (cRef) { default:

带ascii值或字符的开关盒的行为如何相同

case如何在内部将ascii转换为char或char转换为ascii

public class Rq200_150 {

    public static void main(String[] args) {

        for (Character cRef = 'A'; cRef < 'F'; cRef++)
            switch (cRef) {
            default:
                System.out.println((char) ('a' + cRef - 'A'));
                break;
            case 'B':
                System.out.println(cRef);
                break;
            case 68:
                System.out.println(cRef);
                break;
            case 67:
                System.out.println(cRef);
            }
    }

}
公共级Rq200_150{
公共静态void main(字符串[]args){
for(字符cRef='A';cRef<'F';cRef++)
开关(cRef){
违约:
系统输出println((char)('a'+cRef-'a');
打破
案例“B”:
系统输出打印项次(cRef);
打破
案例68:
系统输出打印项次(cRef);
打破
案例67:
系统输出打印项次(cRef);
}
}
}

基本上,字符是0到65535(0xffff)范围内的无符号整数

char:char数据类型是单个16位Unicode字符。它的最小值为“\u0000”(或0),最大值为“\uffff”(或65535)。(来自)

假设您的计算机支持Unicode,它将打印为与该数字对应的Unicode字符

值0到127(0x7f)对应于Unicode的原始前身(ASCII),0到255(0xff)是扩展的ASCII

因此,由于您的程序设置为case“68”或'D',因此它将以相同的方式读取


希望这能回答这个问题,char原语实际上只是一个数字。JavaVM将形式为“x”的任何值转换为对应的等价数字,以进行任何类型的比较。因此,68='D',因此将其中任何一个放入switch语句都将捕获该场景。这就是为什么你可以用chars做数学;字符只是数字。

对某些运算符的操作数执行二进制数字提升:

例如: 数值比较算子=

如果任何操作数属于引用类型,则将对其进行取消装箱 转换(§5.1.8)

加宽原语转换(§5.1.2)用于转换或 由以下规则指定的两个操作数:

如果其中一个操作数的类型为double,则另一个操作数将转换为double

否则,如果其中一个操作数为float类型,则转换另一个操作数 漂浮

否则,如果其中一个操作数的类型为long,则转换另一个操作数 太久了

否则,两个操作数都将转换为int类型

所以在本例中,它将被执行为int


这是一个广泛的话题。我建议您访问

有什么问题?你能详细说明一下吗?虽然我把第68个字符的ascii码作为第D个字符考虑。。所以我的问题是SwitchCase如何知道68是D的ascii值。。。我们正在提供cRef,即开关盒的字符,然后它如何接受68,67个数字盒68是
D
的unicode(和ascii)值,
char
可以转换为int:表示开关盒内部在执行时进行此转换??请参阅。(ASCII与此无关。)转换是否反之亦然?或者它仅将字符转换为int。。。i、 e.“D”为68。。。而不是像“D”那样,它将转换为当时需要的任何东西。如果你打印出数字68,它只会打印出数字,因为它不知道你想要一个字符。您应该使用“char”而不是“Character”,您不需要对象版本,而且它更可预测。转换是否相反?或者它仅将char转换为int。。。i、 e.“D”为68。。。不是68,因为“D”是的,转换是双向的,但当我使用带int的switch case并提供case 68时,它仅打印68。。非字符D`for(int-cRef='A';cRef'