java如何强制转换参数以传递给方法?
我在读一本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
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)工作的原因。请注意以下规则:
仅仅是因为没有
L
的任何整数总是被视为int
。那么第二种方法为什么有效呢?因为你加了L
后缀,这使得它是一个长
。glide(1,4);我这里没有任何L
,但它可以工作!原因与为什么长l=45相同代码>合法,但长度l=45代码>不是!仅仅是因为没有L
的任何整数总是被视为int
。那么第二种方法为什么有效呢?因为你加了L
后缀,这使得它是一个长
。glide(1,4);我这里没有任何L
,但它可以工作!原因与为什么长l=45相同代码>合法,但长度l=45代码>不是!