배열 배열

Q : 어레이 어레이를 어떻게 사용합니까?

ㅏ:

String s = new String ( "Hello, World"); // s는 "Hello, World"값을 가진 문자열 객체를 참조하는 문자열 참조입니다. s = new String ( "Guten Tag, Welt"); // 동일한 문자열 참조는 이제 // 다른 문자열 객체를 참조합니다. 즉, // 단일 참조가 두 개의 서로 다른 객체를 // 연속적으로 참조했습니다. // (이제 참조가없는 "Hello, World"값을 가진 문자열 객체가 // 있습니다. 따라서이 객체는 // 가비지 수집 대상이됩니다.) String t; // t는 null 값이있는 문자열 참조입니다. // (어떤 객체도 참조하지 않음). //이 시점에서 t를 사용하려고하면, 예를 들어 // 다음과 같이 말하면 int len ​​= t.length; // NullPointerException이 발생합니다 (// NullReferenceException으로 호출되어야 함). t = s;// 문자열 참조 t는 이제 문자열 참조 s에서 참조하는 동일한 객체, // 즉 "Guten Tag, Welt"값을 가진 문자열 객체를 참조합니다. // 여기에 단일 객체에 대한 참조가 두 개 있습니다 (동시에).

Java의 배열은 기본 요소 ( ints, chars, booleans 등)를 포함하거나 다른 개체 를 포함하는지 여부에 관계없이 자체적으로 개체입니다. 즉, []집계 / 역 참조 의미론 이 추가되어 배열이 다른 개체와 같이 참조됩니다. 예를 들면 다음과 같습니다.

문자열 [] sa; // sa는 null 참조입니다. // sa.length에 액세스하려고하면 NullPointerException이 발생합니다. sa = 새 문자열 [2]; // sa는 더 이상 null 참조가 아니며, 두 개의 null String 참조 배열 인 특정 객체를 // 참조합니다. // sa.length는 이제 2와 같습니다. // (sa [0] 및 sa [1]은 두 개의 null 문자열 참조입니다). sa [0] = "안녕하세요, 세계"; sa [1] = "Guten Tag, Welt"; // 이제 sa는 두 개의 null이 아닌 문자열 참조의 배열을 나타냅니다. sa = 새 문자열 [1]; // sa.length가 1과 같음 // 동일한 참조 sa가 이제 다른 // (및 더 짧은) 배열을 참조합니다. // sa [0]은 null 문자열 참조입니다. // sa [1]에 액세스하려고하면 // ArrayIndexOutOfBoundsException이 발생합니다. sa [0] = "안녕하세요, 세계"; // sa [0]은 이제 null이 아닙니다.

어레이에 대한 귀하의 질문은 다음을 고려하여 답변 할 수 있습니다.

문자열 [] [] saa; saa [0] [0] = "도움말";

가 발생할 수 NullPointerException있기 때문에, saa널 참조입니다 -이다, saa어떤 객체를 참조하지 않습니다. 첫 번째 배열의 첫 번째 요소에 값을 할당하려면에서 saa길이가 0보다 큰 배열을 참조하고 길이도 0보다 큰 saa[0]null이 아닌 문자열 배열을 참조해야합니다. 따라서 다음과 같이 말할 수 있습니다.

문자열 [] [] saa; // saa는 문자열 배열의 배열에 대한 null 참조입니다. // saa.length를 시도하면 이미 NullPointerException이 발생합니다. // saa [0]을 시도하는 것과 같습니다. saa = 새 문자열 [1] []; // saa는 이제 String []에 대한 1 개의 null 참조 배열을 참조합니다. // saa.length는 1과 같습니다. // saa [0]은 null입니다. saa [0] = 새 문자열 [2]; // saa는 이제 null이 아닌 참조 1 개의 배열을 참조합니다. // 길이 2의 String []에 대한 // saa.length는 여전히 1과 같습니다. // saa [0] .length는 2와 같습니다 (그러나 saa [0] [0] 및 // saa [0] [1]은 모두 null입니다). saa [0] [0] = "안녕하세요, 세계"; saa [0] [1] = "Guten Tag, Welt"; // 이제 saa [0] [0]과 saa [0] [1]은 모두 null이 아닙니다.

saa[0][0]until saa[0]is nonnull을 참조 할 수 없으며 saa[0]nonnull로 만들 때까지 nonnull로 만들 수 없습니다 saa. 기본적으로 배열의 배열을 점진적으로 구축해야합니다.

배열 참조를 초기화하는 데 사용하기 쉬운 속기가 있습니다.

String [] [] saa = {{{ "Hello, World}, {"Guten Tag, Welt "}}}; // 위에서 생성 한 것과 같은 String [] [] 객체를 // 생성하고 saa를 할당합니다. // 공백은 생성 된 객체가 // 두 개의 문자열을 포함하는 하나의 String [] 배열임을 강조하기위한 것입니다. 

이 속기를 사용하면 예제를 다음과 같이 올바르게 작성할 수 있습니다.

문자열 [] [] saa = {{{ "도움말"}}}; 

그러나 이것은 saa하나의 문자열 배열을 참조합니다. 위의 구문은 배열 참조를 초기화 할 때만 작동합니다 (초기화는 선언시 할당의 특별한 경우). 새 배열을 만들고 새 배열 또는 기존 배열 참조에 할당하는보다 일반적인 방법은 다음과 같습니다 (기존 참조의 경우).

saa = new String [] [] {// 빈 [] []에 유의하십시오. 컴파일러가 // 크기를 계산합니다 (빈 [] [] 필요). {{ "Hello"}, { "World"}} // 이것은 saa [0], // 쉼표로 saa [0]과 saa [1] {{ "Guten Tag"}, { "Welt"} } // 이것은 saa [1]}; // 이제 saa.length = 2, saa [0] 및 saa [1]도 각각 길이 2를 갖습니다.
Random Walk Computing은 뉴욕에서 가장 큰 Java / CORBA 컨설팅 부티크로 금융 기업을위한 솔루션에 중점을 둡니다. 최첨단 Java 전문 지식으로 유명한 Random Walk 컨설턴트는 세계에서 가장 존경받는 포럼 중 일부에서 Java에 대해 게시하고 이야기합니다.

이 이야기 "배열 배열"은 원래 JavaWorld에 의해 출판되었습니다.