我正在阅读一本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个参数的方法进行强制转换?
答案 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)
请注意以下规则: