Java 具有字节数据类型的开关盒

Java 具有字节数据类型的开关盒,java,Java,字节的范围是-128到127。但在下面的代码中,它超出了字节范围,代码的输出是“谢谢” 类求解{ public static void main(String args[]) { byte by=10; switch(by+118) {//here it go beyond the byte range. default:System.out.println("Sunday"); case 0:Sys

字节的范围是-128到127。但在下面的代码中,它超出了字节范围,代码的输出是“谢谢”

类求解{

    public static void main(String args[]) {

        byte by=10;

        switch(by+118) {//here it go beyond the byte range.

            default:System.out.println("Sunday");

            case 0:System.out.println("Monday");

            case 128:System.out.println("Thank u");

        }
    }
}
默认情况下,118(称为文本)是int

当您将118(是一个int)添加到字节时,结果存储在int中。这意味着您的switch语句包含一个int

所有其他文字(0和128)也是整数

请注意,如果将结果保留在字节变量中,则会出现溢出,并且值会自动换行。请尝试此代码,该代码已被清理,包括必要的break语句:

public class Test{
    public static void main(String args[]){

        byte by=10;
        byte result = (byte) (by + 118);

        System.out.println("Result: " + result);

        switch(result){

        default:
            System.out.println("default");
            break;

        case 0:
            System.out.println("0");
            break;

        case -128:
            System.out.println("-128");
            break;

        }

    }
}
默认情况下,118(称为文本)是int

当您将118(是一个int)添加到字节时,结果存储在int中。这意味着您的switch语句包含一个int

所有其他文字(0和128)也是整数

请注意,如果将结果保留在字节变量中,则会出现溢出,并且值会自动换行。请尝试此代码,该代码已被清理,包括必要的break语句:

public class Test{
    public static void main(String args[]){

        byte by=10;
        byte result = (byte) (by + 118);

        System.out.println("Result: " + result);

        switch(result){

        default:
            System.out.println("default");
            break;

        case 0:
            System.out.println("0");
            break;

        case -128:
            System.out.println("-128");
            break;

        }

    }
}

因为您正在打开一个int,而不是一个字节。

因为您正在打开一个int,而不是一个字节。

有两个原因:

  • 因为
    118
    文本是一个
    int
    ,添加一个字节和
    int
    会得到
    int
    ,而不是
    字节
    (在Java中,所有没有
    或后缀的数字文本都是
    int

  • 因为您在其他情况下缺少
    break
    语句,所以无论最后打开的值是多少,您都会看到“Thank u”输出,因为
    case
    语句是从第一个匹配的语句开始按顺序运行的

  • 有趣的是,即使你强制所有的数字都是
    byte
    s,你最终还是会走上“谢谢你”的路线:

    输出:

    Thank u true 输出:

    Thank u true 正确有两个原因:

  • 因为
    118
    文本是一个
    int
    ,添加一个字节和
    int
    会得到
    int
    ,而不是
    字节
    (在Java中,所有没有
    或后缀的数字文本都是
    int

  • 因为您在其他情况下缺少
    break
    语句,所以无论最后打开的值是多少,您都会看到“Thank u”输出,因为
    case
    语句是从第一个匹配的语句开始按顺序运行的

  • 有趣的是,即使你强制所有的数字都是
    byte
    s,你最终还是会走上“谢谢你”的路线:

    输出:

    Thank u true 输出:

    Thank u true 符合事实的