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); } } } 26 编译就报错了,如下,说明啥?String...这样的形参其实还是编译为String[]运作的,所以不算重载。 Duplicate method showSports(String[]) in type ParamDemo ParamDemo.java