배열
변수 : 하나의 공간에 하나의 값을 담을 수 있음, 메모리공간에 이름을 붙여서 사용
배열 : 하나의 이름(참조변수)에 여러 개의 "같은 자료형"의 값을 저장할 수 있는 연속적인 메모리 공간을 사용.
배열을 왜 사용하는 이유
변수만을 사용하면 대량의 데이터를 보관하고자할 때 각각의 변수를 만들어서 따로 관리를 해야 한다.
배열 사용방법
1. 선언 : 자료형 [] 배열이름;
int[] arr3;
배열의 참조변수만 생성, 아직 사용가능한 메모리가 없음
2. 생성(메모리를 할당) : 배열이름 = new 자료형 [길이];
arr3 = new int[3];
정수 10개를 저장할 수 있는 공간 생성
반복문을 이용한 값 할당
for(int i=0; i <배열의 길이; i++) {
for(int i=0; i<arr3.length ; i++) {
arr3[i] = (i + 1) * 10;
}
반복문을 이용한 값 출력
for(int i=0; i<arr3.length ; i++) {
int num = arr3[i];
System.out.println(num);
}
for-each문 : 배열을 전체적으로 탐색할 때 쉽게 사용할 수 있는 문법
for(배열의 값을 받아줄 변수 : 배열) {
반복할 코드
}
for(int num : arr3) {
System.out.println(num + "을 가져옴");
}
자바는 메모리의 주소를 확인할 수 없다.
객체 메모리의 암호화된 해시값을 hashCode()로 가져올 수 있다.
double[] dArr = new double[3];
System.out.println(dArr.hashCode());
//dArr 전체 출력(for-each)
for(double j : dArr) {
System.out.print(j + " ");
}
System.out.println();
실제 리터럴값을 곧바로 담을 수 있는 변수를 일반변수
다른 메모리의 주소값을 담고 있는 변수를 참조변수
-> C언어 포인터 개념과 비슷하다.
기본자료형(원시타입) : int, double, float, char, long...
-> 실제 리터럴값을 바로 담을 수 있음.
그 외 자료형(String, Scanner, int [], double []...) -> 참조타입
-> 필요한 메모리의 크기가 가변적이기 때문에.
배열생성 시 따로 초기화하지 않아도 기본값이 담겨있음.
Heap이라는 메모리공간은 절대 빈 공간을 허용하지 않기 때문.
-> 메모리가 할당될 때 JVM이 기본값으로 모두 초기화
NullPointerException -> 참조변수가 가지고 있는 주소값이 없다.
ArrayIndexOutOfBoundsException -> 배열의 크기를 벗어난 index를 제시하면 발생하는 에러
배열의 가장 큰 단점 : 배열은 한번 지정하면 크기변경이 불가
int[] arr = new int[5];
System.out.println(arr.hashCode());
arr = new int[10];
System.out.println(arr.hashCode());
주소값이 변경된 걸 볼 수 있음 -> 수정이 불가하여 새로운 메모리공간을 할당한다.
연결이 끊어진 기존 배열의 메모리공간은 Heap영역에 남아있다.(어떤 변수에도 참조되지 않는 상태)
=> 일정시간이 지나면 "GC(가비지컬렉터)"가 알아서 회수한다.
=> 자바에서의 "자동메모리관리" 특징 => 개발자는 코드에 집중할 수 있음.
arr = null;
배열 비교
int[] arr4 = {1,1,1,1,1};
int[] arr5 = {1,1,1,1,1};
System.out.println(arr4 == arr5);
==통해서 비교할 경우 문자열처럼 주소비교
'JAVA' 카테고리의 다른 글
| JAVA 5일차(1) (2) | 2025.08.11 |
|---|---|
| JAVA 4일차(3) (2) | 2025.08.08 |
| JAVA 4일차(1) (4) | 2025.08.08 |
| JAVA 3일차 (4) | 2025.08.07 |
| JAVA 2일차(2) (2) | 2025.08.06 |