메서드에 정의 된 다른 문자열 배열의 경우 고정 된 차원으로 초기화해야 사용할 수 있습니다.
main
메서드의 인수가 String...
인 경우에 발생합니다. 그것은 커맨드 라인 args로 전달 인자의 고정 번호로 초기화된다. 하지만 그 후에는 크기가 고정되어 있으므로 배열에 아무 것도 추가 할 수 없습니다. 인수를 전달하지 않으면 길이는 0
이됩니다.
인수 유형은 실제로는 varargs이고 String[]
은 아니지만 내부적으로는 이전에 나중에 변환됩니다. varargs를 사용하면 얻을 수있는 이점은 명시 적으로 배열을 만들지 않고도 가변 인수를 전달할 수 있다는 것입니다.
또한 String args []와 같은 무한 크기의 문자열을 만들 수 있습니까?
아니요 배열의 크기에는 제한이 없습니다. args.length
유형은 int
입니다. 논리적으로 최대 요소 수는 2^32 - 1
일 수 있습니다. 하지만 실제로는 그렇지 않습니다. 아마도 그보다 훨씬 많은 메모리가 오버 플로우 될 것입니다.
또한 우리가 메서드 형식 매개 변수에 대해 이야기하고 있으므로 최대 메서드 크기 제한이 여전히 있습니다. JVM에 따라 메서드의 최대 크기는 65536 바이트로 제한됩니다. 예를 들어
: JVM이 종류의이 같은) (주 제어를 전달하기 전에 당신을위한 문자열 [] 인수를 설정하는 것입니다
public static void test(String... names) {
System.out.println("Names array length: " + names.length);
names[names.length] = "xyz"; // This would fail as expected.
names = new String[10]; // this however you can do. Re-assign a new array to names
}
public static void main(String... args) {
test("a", "b", "c"); // pass 3 arguments
test("a", "b"); // pass 2 arguments
}
을 main 함수의 매개 변수는 사용자가 초기화하지 않고 응용 프로그램 스레드를 만들 때 VM을 초기화합니다. 당신의 관점에서 보면, 문자열 배열을 인수로 취하는 임의의 함수를 호출하는 것처럼 배열 참조를 얻을 수 있습니다. 또한, Java 배열은 무한 크기를 가질 수 없습니다. 주 함수 문자열 배열 매개 변수조차 java의 모든 배열과 동일한 상한을가집니다.내가 실수하지 않는다면 2^31-1이되어야합니다. – samjaf
차이점은 호출 코드가 자신을 만들지 않고 배열을 만들 것을 기대한다는 것입니다. 그것이 만들어 질 때, 그것은 같은 방법입니다. –