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

Pra*_*anD 11 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解myMethod()作为int文字的参数,并且参数b是byte类型,这段代码会产生编译时错误.(这可以通过投给参数显式字节来避免:myMethod((byte)12))

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

    public static void main(String [ ] args) {
        MyClass me = new MyClass();
        me.myMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

在经历了这个之后,我预计上面的代码也会产生编译时错误,因为12是一个int文字,返回类型myMethod()是字节.但是没有发生这样的错误.(无需显式的转换:return (byte)12;)

谢谢.

McD*_*ell 11

在这种情况下,Java支持缩小范围.从Java语言规格赋值转换:

如果变量的类型是byte,, short或者char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示.