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

时间:2016-02-07 11:52:38

标签: 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 void play(Long... l) { }

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

}

但是没有完全明白为什么没有java将int转换为long并调用第一个方法,因为它为带有2个参数的方法进行强制转换?

3 个答案:

答案 0 :(得分:2)

因为方法glide使用long类型的参数,而java很容易将int转换为long,但第一种方法使用Long类型的参数,这是long类型的包装类,而不是int,这就是第一种方法无法编译的原因

答案 1 :(得分:2)

第三种方法glide是一个从int到long的自动扩展的示例。

第一种方法play(Long l)接受Long(大写L)对象。基元不能转换为对象,这就是你的第一个例子不能编译的原因,但是编译器会通过“autoboxing”将原语转换为它的等效对象,这就是play(4L)工作的原因。

答案 2 :(得分:2)

请注意以下规则:

  1. 你不能加宽然后装箱。 (int不能成为Long。)
  2. 您不能从一种包装类型扩展到另一种包装类型。 (IS-A失败。)
  3. 您可以装箱然后加宽。 (int可以通过Integer成为Object。)