可变长度的参数list —— java古怪代码(2)

Java代码

/** 
 * 测试可变参数 
 * @author jond 
 * 
 */  
public class VarargTester {  
      
    public static void printArg(String… strings){  
        System.out.println("方法一:\n strings.length="+strings.length);  
        for (int i = 0; i < strings.length; i++) {  
            System.out.print(strings[i]+" ");  
        }  
    }  
      
    public static void printArg(String str,String[] strings){  
        System.out.println("方法二:\n ");  
        System.out.println(" strings.length="+strings.length);  
        for (int i = 0; i < strings.length; i++) {  
            System.out.print(strings[i]+" ");  
        }  
    }  
      
    public static void main(String[] args) {  
        //调用方法一  
        VarargTester.printArg();  
        VarargTester.printArg("a","b","c");  
        VarargTester.printArg("a","b","c","d");  
        String[] strings={"a","b","c"};  
        //调用方法二  
        VarargTester.printArg("eee", strings);  
    }  
}  

运行结果

方法一:  
 strings.length=0  
方法一:  
 strings.length=3  
a b c 方法一:  
 strings.length=4  
a b c d 方法二:  
   
 strings.length=3  
a b c   

 
注解:

代码一

public static void printArg(String… strings)  

代码一中的String… strings,在编译器会被解读成String[] strings,效果如以下代码(代码二)。代码一和代码二不能同时定义在一个类中。

代码二

public static void printArg(String[] strings)  

代码一和代码二有类似的效果,但调用的方式完全不一样:

代码一的调用方式

VarargTester.printArg();  
VarargTester.printArg("a","b","c");  
VarargTester.printArg("a","b","c","d");  

 

应用实例

public class MathUtils {  
      
    /** 
     * 求最大值,没传参数时返回Integer.MIN_VALUE 
     * @param values 
     * @return 
     */  
    public static int max(int… values){  
        int max = Integer.MIN_VALUE;  
              
        for(int i : values){  
            if(i > max)  
                max = i;  
        }  
        return max;  
    }  
      
    public static void main(String[] args) {  
          
        System.out.println(MathUtils.max());  
        System.out.println(MathUtils.max(0,1,2,12,3));  
        System.out.println(MathUtils.max(2,43,566,32,23,23,23,234));  
          
    }  
}