Java 基础之 String... 的用法

8,667 阅读1分钟

前言

String...一般用在方法的形参上,表示一个可变长度的参数列表,即接受0个到多个String类型的对象,或者是一个String[]对象。注意:不能是String类型对象和String[]对象的混搭。

重点一:形参中的String...对象是一个String[]数组对象

  1. 不管传入的实参是一个String对象还是多个String对象,方法形参中的String...对象都是一个String[]数组对象,例如:
public static void main(String[] args){
    String str="hello";
    printString();
    printString(str);
    printString(str,str);
}

public static void printString(String... str) {
	System.out.println("长度:"+str.length);
	for(int i=0;i<str.length;i++) {
	    System.out.println(str[i]);
	}
	System.out.println("================");
}
以上代码的输出结果为:
长度:0
================
长度:1
hello
================
长度:2
hello
hello

从中可以看出,不管实参是0个还是多个String对象,String...都会将实参组成一个String[]数组对象。

重点二:方法test(String... str)存在时,不能再写方法test(String[] str)

  1. 如果已经有方法test(String.. str),不能再写方法test(String[] str)方法,否则编译器会报错:该方法已存在。
  2. 方法test(String... str)存在时,仍然可以重载方法test()、test(String str)、test(String str1,String str2),但是方法test(String... str)不会被优先调用。例如:
public static void main(String[] args) throws SQLException {
    // TODO Auto-generated method stub
    String str = "123";
    test();
    test(str);
}

public static void test(String... str) {
    System.out.println("test(String... str)");
}

public static void test(){
    System.out.println("test()");
}

public static void test(String str) {
    System.out.println("test(String str)");
}
以上代码的输出结果为:
test()
test(String str)

从中可以看出,虽然test(String... str)也可以接收0到多个String对象的参数,但是却优先调用了方法test()和test(String str)。