(1) 선언과 동시에 빈 배열 생성
int[] intArray = new int[5]; // 크기 5의 빈 배열
(2) 선언 후, 배열 생성
int[] intArray; intArray = new int[5]; // 크기 5의 빈 배열
(3) 리터럴로 생성
int[] intArray = {1, 2, 3, 4, 5};
이렇게 하면 5개의 원소가 있으니까 intArray는 자동으로 크기 5의 배열
그런데 이 방식은 변수를 정의할 때만 할 수 있다.
밑에 코드처럼 두 줄에 나누어서 하면 오류int[] intArray; intArray = {1, 2, 3, 4, 5}; // 오류
값을 대입하는 방법
intArray[0] = 1;
intArray[1] = 2;
intArray[2] = 3;
intArray[3] = 4;
intArray[4] = 5;
이렇게 하면 0번 인덱스에는 정수 1을 넣어주고,
1번 인덱스에는 정수 2를 넣어주고. 이런식으로 intArray 배열을 채우게 된다.
여기서 중요한 점: 인덱스는 0부터 시작!
5칸 짜리 배열이라면 인덱스가 0부터 4까지
intArray[5] = 6;
런타임에 이런 에러가 나온다:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
런타임이란, 코드 작성 시점이 아니라 실제 실행될 때를 뜻
intArray[5] = 6;을 적었을 때는 오류가 없다.
문법적으로 오류가 없기 때문.
그런데 실제 실행을 해서 접근하려고 하면 문제가 생기는 것이다.
변수명 뒤에 인덱스가 들어간다는 것 말고는 일반적인 변수와 사용법이 같다.
intArray[0] = 1;
intArray[1] = 2;
값을 읽을 때
System.out.println(intArray[0] + intArray[1]); // 1 + 2
3
배열을 통째로 넘길 수도 있다.
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1;
arr1[0] = 100;
System.out.println(arr2[0]);
100
arr1을 arr2에 지정해줬을 때,
두 변수는 같은 주소를 가리키게 된다.사실 arr1과 arr2는 아예 똑같은 값이다.
arr2를 arr1의 'Alias(가명)'이라고 할 수 있다.
만약 arr1을 arr2에 새롭게 복사하고 싶으면 어떻게 해야할까?
int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = arr1.clone(); arr1[0] = 100; System.out.println(arr1[0]); System.out.println(arr2[0]);
100 1
clone라는 메소드를 사용하면된다.
이렇게 하면 배열이 복사가 된 것이라, arr1과 arr2는 서로 다른 배열
그래서 arr1[0]을 수정해도 arr2[0]에는 영향을 미치지 않고,
1이 출력된다.
100개 짜리 배열을 만들고
첫 번째 칸은 1, 두 번째 칸은 2, ..., 마지막 칸은 100으로 채워보면
int[] intArray = new int[100];
for (int i = 0; i < 100; i++) {
intArray[i] = i + 1;
}
여기서 코드를 더 직관적으로 바꾸려면 100 대신 intArray.length를 쓰면 된다.
int[] intArray = new int[100];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = i + 1;
}
for (int i : intArray) { System.out.println(i); }
이렇게 쓰면, 처음에 수행 부분으로 들어갈 때
i는 intArray의 0번 인덱스의 값(원소)을 갖게 되고,
그 다음 들어갈 때는 1번 인덱스의 값(원소)을 갖게 되고...
이런 식으로 배열의 마지막 값(원소)까지 갖게 된다.for (double i : intArray) { System.out.println(i); }
double에 int값을 넣으면 자동으로 형 변환이 되기 때문에
위의 식처럼 써도 문제 없다.
문자열을 담는 fruitsArray을 만든 후,
원소를 저장하고, for - each문을 활용하여 원소들을 출력String[] fruitsArray = new String[5]; fruitsArray[0] = "딸기"; fruitsArray[1] = "당근"; fruitsArray[2] = "수박"; fruitsArray[3] = "참외"; fruitsArray[4] = "메론"; for (String fruit : fruitsArray) { System.out.println(fruit); }
딸기 당근 수박 참외 메론