1. 메모리의 배열

이전 예에서는 그림이 약간 부정확했습니다.

배열을 생성할 때(문자열을 생성할 때와 같이) 두 개의 개별 메모리 블록이 할당됩니다. 하나는 배열 ( 컨테이너) 자체를 저장하기 위한 것이고 두 번째 블록은 주소 를 저장하는 변수를 위한 것입니다 . 아래 그림은 이 설명을 나타냅니다.

메모리의 배열

요소 배열에 할당된 메모리 10 int와 배열 의 주소를int[] 저장하는 변수는 녹색으로 표시됩니다.int

int비교를 위해 값을 저장하는 일반 변수는 199파란색으로 표시됩니다.

이것은 문자열을 메모리에 저장하는 것과 약간 비슷하다고 생각하지 않습니까?

맞습니다, 문자열입니다. 문자열로 작업할 때와 마찬가지로 배열 변수를 서로 할당할 수 있습니다.

암호 설명
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
요소 배열을 만듭니다 10 int. index 가 있는 셀에
값을 할당합니다 . index 가 있는 셀에 값을 할당합니다 . 변수 에는 변수 에 저장된 주소를 저장합니다 . 이제 메모리에 있는 동일한 배열 개체를 가리킵니다 . 인덱스가 있는 배열 개체의 셀에서 셀 (값 저장 )과 셀(값 저장 ) 에 저장된 값의 합계를 작성합니다 .42
97
ba
ab
92479

배열 개체는 원래 위치에 그대로 유지되며 및 a변수 b는 동일한 개체에 대한 동일한 주소(참조)를 저장합니다. 사진을 봐:

메모리 2의 배열

2. 어레이 작업에 대한 자세한 내용

절대적으로 모든 유형의 요소 배열을 만들 수 있습니다. 이렇게 하려면 유형 이름 뒤에 대괄호를 쓰면 됩니다. 일반적으로 배열을 만드는 것은 다음과 같습니다.

type[] name = new type[number];

여기서 type은 배열에 저장할 요소의 유형입니다. Name 은 배열을 참조하는 데 사용할 변수의 이름이고 number 는 배열의 셀 수입니다.

위의 예는 배열 변수 및 배열 개체를 만들기 위한 표준 형식입니다. 실제로 이들은 두 개의 개별 엔티티입니다.

배열 객체와 별도로 배열 변수를 만들 수 있습니다.

type[] name;
name = new type[number];

그리고 중요하지 않은 한 가지 더:

변수 또는 전체 표현식을 인덱스 배열배열 요소 수로 사용할 수 있습니다 .

예:

암호 설명
int n = 100;
int[] a = new int[n];
n요소 배열 만들기
int n = 100;
int[] a = new int[n * 2 + 3];
203요소 가 있는 배열 만들기
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
중요한:
그건 그렇고, 배열에 대해 존재하지 않는 인덱스를 사용하여 배열 셀에 액세스하려고 하면(이 예에서는 범위에 없는 정수를 의미함) 프로그램이 다음과 같이 충돌합니다 0..99. ArrayIndexOfBoundException, 인덱스가 배열 범위 밖에 있음을 의미합니다.

3. 어레이 길이

이전 예제에서 본 것처럼 배열 변수를 자체적으로 생성한 다음 나중에 코드 어딘가에 값(배열 개체에 대한 참조)을 할당할 수 있습니다. 다음과 같이 할 수도 있습니다.

암호 설명
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
형식이 인 배열 변수를 만듭니다 . 변수가 보다 작은 int[]
경우 요소 의 배열을 만듭니다 . 그렇지 않으면 요소 배열을 만듭니다.a10
10

20

이제 그러한 배열로 무엇을 할 수 있습니까? 얼마나 많은 요소가 있는지 어떻게 알 수 있습니까?

이를 돕기 위해 배열에는 이라는 특수 속성(변수)이 있습니다 length. 다음 표현식을 사용하여 배열의 길이를 찾을 수 있습니다.

array.length;

다음 array은 배열 변수의 이름이고 는 length배열 속성의 이름입니다. 속성 값은 length변경할 수 없습니다. length속성 자체는 다른 변수에 할당할 수 있지만 아무 것도 할당할 수 없습니다(이렇게 하면 프로그램이 컴파일되지 않습니다).

다음과 같이 이전 예제를 계속할 수 있습니다.

암호 설명
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
} 
형식이 인 배열 변수를 만듭니다 . 변수가 보다 작은 int[]
경우 요소 의 배열을 만듭니다 . 그렇지 않으면 요소 배열을 만듭니다. 배열의 모든 요소에 대해 반복합니다: from to lengtha10
10

20
0array.length - 1

4. Java의 배열에 대한 사실 요약

배열에 대해 알고 있는 내용을 요약해 보겠습니다.

사실 1. 배열은 많은 셀로 구성됩니다.

사실 2. 특정 셀의 번호(인덱스)를 이용하여 접근합니다.

사실 3. 모든 세포는 같은 유형입니다.

사실 4. 모든 셀의 초기 값은 0(셀이 숫자를 저장하는 경우), null(셀이 개체 참조를 저장하는 경우) 또는 false(셀이 boolean값을 저장하는 경우)입니다. 이 장에서 기본값에 대해 자세히 알아볼 것입니다 .

사실 5. String[] list 변수의 선언일 뿐입니다. 이것은 컨테이너(배열 객체) 자체를 생성하지 않습니다. 변수를 사용하려면 먼저 배열(컨테이너)을 생성하고 변수에 할당해야 합니다. 아래 예를 참조하십시오.

사실 6. 배열 객체(컨테이너)를 생성할 때 크기, 즉 포함하는 셀 수를 표시해야 합니다. 이것은 다음과 같은 명령문으로 수행됩니다: new TypeName[n];

사실 7. 배열의 길이는 .length속성을 사용하여 찾을 수 있습니다.

사실 8. 배열을 만든 후에는 요소의 유형이나 저장하는 요소의 수를 변경할 수 없습니다.

암호 설명
String s;
String[] list;
s이다 null
list_null
list = new String[10];
int n = list.length;
변수 는 요소 list로 구성된 문자열 배열인 개체에 대한 참조를 저장합니다 10.
n~이다10
list = new String[0];

이제 요소 list의 배열을 참조합니다 0. 배열이 존재하지만 요소를 저장할 수 없습니다.

list = null;
System.out.println(list[1]);
예외(프로그램 오류)가 발생합니다. 즉, 프로그램이 충돌합니다. list에 대한 참조를 저장null
list = new String[10];
System.out.println(list[10]);
범위를 벗어난 배열 예외(프로그램 오류)가 생성됩니다.
a가 요소/셀을 list저장하는 경우 10유효한 색인은 다음과 같습니다. 0 1 2 3 4 5 6 7 8 910요소.