public static void pp(int b){
System.out.println("hellow!");

}
public static void pp(int... b){
System.out.println("hellow sec!");
}但执行pp(3)时如何判断调用哪个方法呢!!

解决方案 »

  1.   

    可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。所以会调用第一个方法
      

  2.   

    会调用第一个
    因为第一个方法精确匹配了参数
    像这种可变式的参数,匹配范围是很宽泛的,因此级别也比较靠后
    所以JAVA会先优先调用精确匹配的那个方法
      

  3.   


    public class VarArgsTest {
        public static void main(String[] args) {
            m1();
            m1("one");
            m1("one","two");
            //m1("one","two","three");//报错,因为系统不知道调用哪个方法...
            
        }
        
        public static void m1(String s1,String s2){
            System.out.println("m1(String s1,String s2)");
        }
        public static void m1(){
            System.out.println("m1()");
        }
        public static void m1(String s){
            System.out.println("m1(String s)");
        }
        public static void m1(String s,String... str){
            System.out.println("m1(String s1,String... str)");
        }
        public static void m1(String... str){
            System.out.println("m1(String... str)");
        }}
    测试结果 
    m1() 
    m1(String s) 
    m1(String s1,String s2) 
    说明 
    变长参数只有在必须的时候才被调用,换言之,加入有定长参数能够匹配的时候有限选择定长的方法去调用