为什么这里不需要明确的演员?

时间:2012-12-17 13:31:38

标签: java methods casting return-type

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;

感谢。

3 个答案:

答案 0 :(得分:11)

Java在这种情况下支持缩小范围。来自{{3>} 分配转换

  

如果类型为,则可以使用缩小的基元转换   变量是byteshortchar,以及常量的值   表达式可以在变量的类型中表示。

答案 1 :(得分:2)

来自Java Primitive Data Type reference

  

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

尝试返回128:))

答案 2 :(得分:0)

只要值在范围内,这将有效byte b = 4,但如果您尝试byte b = 2000之类的内容,则会出现编译错误,因为它超出了范围。 12在范围内,因此您不会收到错误。