转换和促销

Dav*_*ria 2 java

我只是想知道为什么这有效(在Java中):

byte b = 27;
Run Code Online (Sandbox Code Playgroud)

但是这样的方法声明:

public void method(byte b){
    System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

a.method(27);
Run Code Online (Sandbox Code Playgroud)

给出编译器错误如下:

`The method method(byte) in the type App is not applicable for the arguments (int)`
Run Code Online (Sandbox Code Playgroud)

阅读本文并没有给我任何线索(可能是我误解了一些东西).

提前致谢.

Jon*_*eet 9

分配的原因

byte b = 27;
Run Code Online (Sandbox Code Playgroud)

工作是由Java语言规范(赋值转换)的5.2节引起的,其中包括:

此外,如果表达式类型的常量表达式(§15.28) , ,byte 或:shortcharint

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

换句话说,该语言对此案例有特殊规定和作业.通常情况下,有从没有隐式转换intbyte.

有趣的是,C#在这方面的工作方式不同(尽管在核心功能的许多其他方面都像Java一样) - 方法调用在C#中是有效的.