Java 编译器的输出与OCAJP准备书重载方法不同
我正在准备一本Enthuware问题书中的OCA Java SE 7,当我在运行Java 1.7编译器的Eclipse中编译时,我得到了一个不同的输出: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
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,并且有错误。