说实话,早就发现了,但是不知道为什么,也许sun就想这样吧你可以把下面的Object数组分别改成下面两个试验一下(两两放到一起编译出错)
public static void test(byte[] oa) {
System.out.println("test byte array");
} public static void test(int[] oa) {
System.out.println("test int array");
}另外,你说:可是去掉下面的方法后,结果是test Object 这是正常的!!!数组本身就属于Object,有意思的是,Object数组也属于Object
public static void test(byte[] oa) {
System.out.println("test byte array");
} public static void test(int[] oa) {
System.out.println("test int array");
}另外,你说:可是去掉下面的方法后,结果是test Object 这是正常的!!!数组本身就属于Object,有意思的是,Object数组也属于Object
public static void main(String[] args) {
Object a = new Object();
Object b = new Object();
Object[] c = {a,b};
test(a);
test(c);
} public static void test(Object o) {
System.out.println("test Object");
}
public static void test(Object[] oa)
{
System.out.println("test Object array");
}
} 虚拟机无法判断 null 的的类型
test Object array
Press any key to continue...
public static void test(String [] o) {
System.out.println("test String []");
}
的时候执行的结果就是test String []。
但是加
public static void test(String o) {
System.out.println("test String ");
}
的时候编译不能通过,报下面异常。
OverloadGame.java:3: reference to test is ambiguous, both method test(java.lang.Object[]) in Overloa
test(null);
___________________________________所有问题的答案如下(cnjbb.org上axman给出的回答)
这里有Object[] 只是一种普通的"数组类型",是一种具体类型,而Object o是通用类型.
当通用类型和具体类型同时匹配时,具体类型先匹配.这和test(String s);
test(Object o);
没什么两样.
如果你同时定义了具体类型和通用类型的方法,JVM认为你通用类型只是为了传入通用类型时才起作用.而具体类型是最先和传入的参数匹配
————————————————————
要看详细的原因可以查看jvm的相关资料