public class Test {
static void test(Integer x) {
System.out.println("Integer");
}
static void test(long x) {
System.out.println("long");
}
static void test(Byte x) {
System.out.println("byte");
}
static void test(Short x) {
System.out.println("short");
}
public static void main(String[] args) {
int i = 5;
test(i);
}
}
输出值为“long”。
只能告诉我它为什么不是“Integer”,因为在Java中,int值应该是自动装箱的。
答案 0 :(得分:14)
当编译器可以选择将int
扩展为long
或将int
列为Integer
时,它会选择最便宜的转换:扩展为{ {1}}。 section 5.3 of the Java language specification中描述了方法调用上下文中的转换规则,section 15.12.2(具体为section 15.12.2.5中描述了当存在多个潜在匹配时选择匹配方法的规则,但是警告说这是非常密集的阅读。)
答案 1 :(得分:0)
这些只接受测试方法的integer
类的实例,它不是java的原始整数类型。 Integer
是一类java,而不是int
类的基本类型String
。另一方面,long
是一种基本类型,它有int
的子集,因此它选择了该参数,因为它是最接近的匹配。您也可以尝试使用double参数。当int或long签名缺少方法参数时,它选择使用double
的一个,因为它是最接近的匹配。
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html
试试这个:
public static void main(String[] args) {
int i = 5;
test(i);
Integer smartInt= new Integer(5);
test(smartInt);
}