4
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”。

只能告诉我为什么它不是“整数”,因为在 Java 中,int 值应该是自动装箱的。

4

2 回答 2

14

当编译器可以选择将 an 扩展int为 along或将 an 装箱int为 anInteger时,它会选择最便宜的转换:扩展为 a long。方法调用上下文中的转换规则在Java 语言规范的第 5.3 节中描述,当有多个潜在匹配时选择匹配方法的规则在第 15.12.2 节(特别是第 15.12.2.5 节)中描述,但是警告说这是非常密集的阅读)。

于 2013-02-07T20:22:33.150 回答
0

这些只接受integer您的测试方法的类实例,它不是 java 的原始整数类型。Integer是 java 的一个类,而不是类的原始int类型String。另一方面long,它是一个原始类型,它有一个子集,int所以它选择了那个参数,因为它是最接近的匹配。您也可以尝试使用双参数。当 int 或 long 是方法参数中缺少签名时,它选择使用double's ,因为它是最接近的匹配项。

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); 
}
于 2013-02-07T20:27:55.823 回答