说实话,早就发现了,但是不知道为什么,也许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

解决方案 »

  1.   

    public class OverloadGame {
        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 的的类型
      

  2.   

    这个我想了一下,可能是这样两个test重载函数,参数分别是Object和Object[],在java中,数组本身也是一个对象,也就是说Object同样是Object[]的父类(好像很拗口),因此在null在匹配参数时优先匹配的是Object[]
      

  3.   

    test Object
    test Object array
    Press any key to continue...
      

  4.   

    虚拟机无法判断  null 的的类型
      

  5.   

    当再加一个
    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的相关资料