java如何强制转换参数以传递给方法?

java如何强制转换参数以传递给方法?,java,Java,我在读一本java的书,并想出了这个例子 public class Main { public static void main(String[] args) { play(4); // DOES NOT COMPILE play(4L); glide(1,4); // THIS ONE COMPILES } public static void play(Long l) { } public static vo

我在读一本java的书,并想出了这个例子

public class Main {
    public static void main(String[] args) {
        play(4); // DOES NOT COMPILE
        play(4L);
        glide(1,4); // THIS ONE COMPILES
    }

    public static void play(Long l) { }

    public static void play(Long... l) { }

    public static void glide(long i, long j) {}

}

但是我不太明白为什么java不将int转换为long并调用第一个方法,因为它对具有两个参数的方法进行转换?

因为方法
glide
使用
long
类型的参数,java很容易将
int
转换为
long
,但是第一个方法使用
Long
类型的参数,这是
Long
类型的包装类,而不是
int
,这就是为什么第一个方法没有编译的原因,因为方法
glide
使用
Long
类型的参数,java很容易将
int
转换为
Long
,但是第一个方法使用类型为
Long
的参数,这是
Long
类型的包装类,而不是
int
,这就是为什么第一个方法不编译第三个方法glide是一个自动将int转换为Long的示例


第一个方法play(longl)接受Long(大写l)对象。原语不能转换为对象,这就是第一个示例无法编译的原因,但编译器将通过“自动装箱”将原语转换为其等效对象,这就是play(4L)工作的原因。

第三种方法glide是自动将整型转换为长型的示例

第一个方法play(longl)接受Long(大写l)对象。原语不能转换为对象,这就是第一个示例无法编译的原因,但编译器将通过“自动装箱”将原语转换为其等效对象,这就是play(4L)工作的原因。

请注意以下规则:

  • 不能先加宽,然后再装箱。(int不能变成Long。)
  • 不能从一种包装类型扩展到另一种包装类型。(IS-A失败。)
  • 您可以先装箱,然后加宽。(整数可以通过整数变成对象。)
  • 请注意以下规则:

  • 不能先加宽,然后再装箱。(int不能变成Long。)
  • 不能从一种包装类型扩展到另一种包装类型。(IS-A失败。)
  • 您可以先装箱,然后加宽。(整数可以通过整数变成对象。)

  • 仅仅是因为没有
    L
    的任何整数总是被视为
    int
    。那么第二种方法为什么有效呢?因为你加了
    L
    后缀,这使得它是一个
    。glide(1,4);我这里没有任何
    L
    ,但它可以工作!原因与为什么
    长l=45相同合法,但长度l=45不是!仅仅是因为没有
    L
    的任何整数总是被视为
    int
    。那么第二种方法为什么有效呢?因为你加了
    L
    后缀,这使得它是一个
    。glide(1,4);我这里没有任何
    L
    ,但它可以工作!原因与为什么
    长l=45相同合法,但长度l=45不是!