日期:2014-05-20  浏览次数:20713 次

JAVA SE5为什么提出可变形参的概念?
RT,使用int fun(String [])和使用int fun(String ...)都是代表String参数的个数不确定。

那么提出(Sting ...)的根本原因是什么?它能解决的问题使用(String [])不能解决吗??可能是我没学多久,没有了解好处,所以请有经验的大牛指点一下。谢谢~
JAVA

------解决方案--------------------

public static void testArray() {

/**
 * 用countString(String[] arr)能做到的, countString1(String... arr) 都能做到。
 * 可是反过来是不成立的。
 * 比如:我只需要传入一个Sting,而不是一个Stirng[]的数组,那么countString(String[] arr)就做不到。
 */
String[] arr0 = {"hello","hello"};
System.out.println(countString(arr0));

System.out.println(countString1(arr0));
System.out.println(countString1("hello"));
System.out.println(countString1("hello","world","home"));
}

/**
 * 可以接受的参数:String[]数组,单个String,多个String的列表
 * @param arr
 * @return
 */
private static int countString1(String... arr){
return arr.length;
}
/**
 * 只能接受String[]数组作为参数
 * @param arr
 * @return
 */
private static int countString(String[] arr){
return arr.length;
}

------解决方案--------------------
数组的功能是可变参数功能的子集,凡是用数组做形参的地方都可以用可变参数替换。例如main方法:
public static main(String[] args) {
     //待执行的代码
}
可以写成
public static main(String... args) {
     //待执行的代码
}

可变参数的功能比数组更为强大,除了能够接收数组类型的实参外 ,还能够接收个数不限的单个实参。
写成“String... args”这样子,实际上是提醒编译器将接收到的若干单个实参整理成数组传给args,
args归根结底接收到的还是数组。当然,你若直接给args传一个数组也没有错,这样反而省的编译器去整理了。

总结一下:可变参数是数组参数功能上的扩展。