Java 编译器的输出与OCAJP准备书重载方法不同

Java 编译器的输出与OCAJP准备书重载方法不同,java,eclipse,overloading,Java,Eclipse,Overloading,我正在准备一本Enthuware问题书中的OCA Java SE 7,当我在运行Java 1.7编译器的Eclipse中编译时,我得到了一个不同的输出: public class TestClass { void probe(int x) { System.out.println("In ...");} //1 void probe(Integer x) { System.out.println("In Integer");} //2 void probe(long

我正在准备一本Enthuware问题书中的OCA Java SE 7,当我在运行Java 1.7编译器的Eclipse中编译时,我得到了一个不同的输出:

public class TestClass {
    void probe(int x) { System.out.println("In ...");} //1

    void probe(Integer x) { System.out.println("In Integer");} //2

    void probe(long x) { System.out.println("In long");} //3

    void probe(Long x) { System.out.println("In LONG");} //4

    public static void main(String[] args){
        Integer a = 4; new TestClass().probe(a); //5
        int b = 4; new TestClass().probe(b); //6
    }
}
图书输出为: “整数和长”和

Eclipse中的输出显示“in Integer和in…”


请帮我确认哪个是正确答案。谢谢

您看到的输出是正确的行为。重载方法在编译时解析,以获得最佳的数据类型兼容性。检查本书所针对的jdk版本。

是的,当然您的输出是正确的:) 但我昨天做了相同的测试,测试的第一行有var args:

void probe(int... x) { System.out.println("In ...");} //1
而不是

void probe(int x) { System.out.println("In ...");} //1

因此,在第一行使用var args的情况下,Enthuware测试的输出是正确的

你的输出是正确的。。你能重新检查并告诉他们是否使用了书中的lhs吗?书中正确的选项是:A D A.整数和B.长。。。在LONG中,如果注释掉了//2和//3。C.如果注释掉了//4,则表示整数和。D.如果注释掉了//1、//2和//3,它将不会编译。E.在LONG和In LONG中,如果注释掉了//1和//2。这是在旧的Java6规范中吗?我希望不是打字错误。你可能是对的……我认为这本书使用的是JDK6,并且有错误。