1. 背景
從JDK1.5開始,Java支持個數可變的形參,類似:
public class ParamDemo {
public static void main(String[] args) {
String basketball = "籃球";
String football = "足球";
showSports(basketball, football);
}
/**
* 使用個數可變形參的方法
*/
public static void showSports(String... sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
}
2. 優點
其實個數可變形參的本質就是一位數組,但是如果上面的例子採用一位數組的話,寫起來要更加麻煩點。
public class ParamDemo {
public static void main(String[] args) {
String basketball = "籃球";
String football = "足球";
showSports(basketball, football);
showSportsByArray(new String[] { basketball, football });
}
/**
* 使用個數可變形參的方法
*/
public static void showSports(String... sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
/**
* 使用1維數組作爲形參
*/
public static void showSportsByArray(String[] sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
}
3. 注意事項
3.1 位置只能在方法的最後
由於個數可變的形參數量不確定,所以只能放到形參列表的最後。而數組形式的參數是可以放到形參列表任意位置的。
3.2 個數可變形參本質是數組,所以不能算重載
看下面的例子:
public class ParamDemo {
public static void main(String[] args) {
String basketball = "籃球";
String football = "足球";
showSports(basketball, football);
showSportsByArray(new String[] { basketball, football });
}
/**
* 使用個數可變形參的方法
*/
public static void showSports(String... sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
/**
* 使用1維數組作爲形參
*/
public static void showSports(String[] sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
}
編譯就報錯了,如下,說明啥?String...
這樣的形參其實還是編譯爲String[]
運作的,所以不算重載。
Duplicate method showSports(String[]) in type ParamDemo ParamDemo.java