Java转换错误?

sHA*_*ILU 2 java casting downcast

任何人都知道为什么编译器不能在'short'中输出值'7'?显式转换正在工作,但在传递参数时它不起作用!

class Alien {
    String invade(short ships) { return "a few"; }
    String invade(short... ships) { return "many"; }
}
public class Wind {
    public static void main(String [] args) {
        short temp = 7;
        System.out.println(new Alien().invade(7));
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

整数文字(这是我们在这里讨论的)是int值,除非它们有一个后缀来表示它们是long值.

规范3.10.1节:

如果整数文字后缀为ASCII字母L或l(ell),则整数文字的长度为long; 否则它的类型为int(§4.2.1).

但是铸造很好.它也完全有可能有一个不是文字的常量.例如:

public static final short THIS_IS_A_SHORT = 7;
Run Code Online (Sandbox Code Playgroud)

THIS_IS_A_SHORT是一个类型的常量short.在这种情况下,你甚至不需要演员,因为它是一个任务.作业受JLS第5.2节的约束,其中包括:

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

一种方法的说法是服从分配的转换.