为什么在这种情况下,当我对 switch 表达式和 case 值使用不同的数据类型时没有编译错误

Why there is no compilation error when I am using different data types for switch expression and case value in this case

public class Conditionsif {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int day=1;
        switch(day){
        case '1':
            System.out.println("Monday");
            break;
        
        }
        
    }

}

虽然switch表达式是整数数据类型,case值为字符,但上面没有编译错误

这是因为隐式转换 a 的 ascii 值为 97

 switch(97){
           case 'a': System.out.println("a"); break;
           case 'b': System.out.println("b"); break;
           case 'c': System.out.println("c"); break;
 }

当您使用 ' ' 时,这意味着您使用 char 数据类型。 char 数据类型只接受一个字符, 例如 : 字符 x = 'h';

同时接受字符的 Ascii 码 例如 : 字符 x = 104;

所以 case '1' 表示比较变量 day 的值等于值 1。

如果您修改如下代码,此代码将打印星期一。

    int day=97;
    switch(day){
    case 'a':
        System.out.println("Monday");
        break;
    }

此致。