11
class MyClass {
    void myMethod(byte b) {
        System.out.print("myMethod1");
    }

    public static void main(String [] args) {
        MyClass me = new MyClass();
        me.myMethod(12);
    }
}

我知道参数myMethod()int文字,参数b是字节类型,这段代码会产生编译时错误。(可以通过对参数使用显式字节转换来避免myMethod((byte)12):)

class MyClass{
    byte myMethod() {
        return 12;
    }

    public static void main(String [ ] args) {
        MyClass me = new MyClass();
        me.myMethod();
    }
}

在经历了这个之后,我认为上面的代码也会产生编译时错误,考虑到 12 是一个int字面量并且返回类型myMethod()是字节。但是不会发生这样的错误。(不需要明确的演员表return (byte)12;:)

谢谢。

4

3 回答 3

11

在这种情况下,Java 支持缩小范围。来自关于赋值转换的Java 语言规范

如果变量的类型是 、 或 ,并且常量表达式的值可以用变量的类型表示,则可以使用窄化原byteshort转换char

于 2012-12-17T13:38:39.457 回答
2

来自Java 原始数据类型参考

byte:byte 数据类型是一个 8 位有符号二进制补码整数。它的最小值为 -128,最大值为 127(含)。

尝试返回 128 :))

于 2012-12-17T13:34:07.477 回答
0

byte b = 4只要值在范围内,这将起作用,但是如果您尝试类似的byte b = 2000操作,则会出现编译器错误,因为它超出了范围。12在范围内,因此您不会出错。

于 2012-12-17T13:35:44.197 回答