가변인자: 매개변수의 개수를 동적으로 지정해주는 것
가변인자는 내부에서 배열로 처리한다.
가변인자는 맨 뒤에 선언해야 한다. 가변인자인지 아닌지 모르기 때문이다.
public class VarArgsEx {//6-22
public static void main(String... args){//이건 가변인자군 ->여기서는 배열인데 가변인자로 적어도 실행이 된다
String[] strArr = {"100","200","300"};
System.out.println(concatenate("","100","200","300"));
System.out.println(concatenate("-",strArr));
System.out.println(concatenate(",",new String[]{"1","2","3"}));
System.out.println("["+concatenate(",",new String[0])+"]"); //크기가 0인 스트링 배열일뿐 값이 있지않아 args 매개변수로 전해진 값이 없다
System.out.println("["+concatenate(",")+"]");//args 매개변수로 전달된 값이 없어서 메서드안에 for문도 실행이 되지 않아 [] 만 출력된다
}
static String concatenate(String delim,String... args){
String result = ""; //기본값
// for(String str: args){
// result += str + delim;
// }
//가변인자는 배열로 처리한다
// for(int i=0; i<args.length; i++){
// result += args[i] + delim;
// }
//마지막 단어 뒤에 구분자 안붙게 하는법
for(int i=0; i<args.length; i++){
if(i!=args.length-1)
result += args[i]+ delim;
else
result += args[i] ;
}
return result;
}
// static String concatenate(String... args) {
// return concatenate("", args);
// }
//안되는 이유는 ("a","b","c")라고 부르면 a를 delim으로 보고 나머지를 가변인자로 볼지 아니면 모두 가변인자로 볼지 둘 다 가능해서 안되는거임
}
/*
1. 마지막 단어 뒤에 구분자 안붙게 하는 법
2. 가변인자를 매개변수 맨 앞에 두면 에러가 나는 이유
-> 가변인자랑 다른 매개변수랑 같이 있을 때만 맨 앞에 두면 안되고 마지막에 두어야 하는데 그러면 인자의 값이 다 가변인자로 인식이 되어서 그런다
3. 가변인자는 내부에서 배열로 처리된다
*/