안녕하세요 이번에는 String 배열에 대해 알아보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package sec01_firstArray;
import java.util.Arrays;
public class Array_Ex4 {
public static void main(String[] args) {
//String은 클래스이기 때문에 String 배열은 2차원 배열과 동일하다.
String[] names = new String[3];
System.out.println(Arrays.toString(names));
names[0] = new String("박보검");
names[1] = new String("장동윤");
names[2] = new String("아이들"); //attach: 붙이다.
// names[3] = new String("슈화");
// ArrayIndexOutOfBoundsException예외가 발생함.
// 방이 없다는 뜻
}
}
|
cs |
String은 참조형 변수입니다.
그래서 값을 가지는 것이 아니라 주소를 가지고 주소를 참조합니다.
메모리 상에서는 이렇게 됩니다.
그러니까 String배열은 단순히 1차원 배열이 아니라 2차원 배열이라고 할 수 있겠습니다.
밑에 주석 처리 한 코드를 보시면
방이 3개 만들어졌는데 4번째 방에 값을 넣고 있으니 방이없다는 예외가 발생합니다.
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package sec01_firstArray;
import java.util.Arrays;
public class Array_Ex4 {
public static void main(String[] args) {
//String은 클래스이기 때문에 String 배열은 2차원 배열과 동일하다.
String[] names = new String[3];
System.out.println(Arrays.toString(names));
names[0] = new String("박보검");
names[1] = new String("장동윤");
names[2] = new String("아이들"); //attach: 붙이다.
// names[3] = new String("슈화");
// ArrayIndexOutOfBoundsException예외가 발생함.
// 방이 없다는 뜻
System.out.println(Arrays.toString(names));
for (int i = 0; i < names.length; i++) {
System.out.println("names["+ i +"]= " + names[i].toString());
}
//배열로부터 값을 얻어내기
String temp = names[2];//temp와 names[2]는 같은 주소를 참조함.
System.out.println("temp : " + temp);
System.out.println("names[2] : " + names[2]);
names[0] = "슈화";//위에서 박보검을 참조하던 주소가 사라지고
//새로운 주소가 만들어지면서
//박보검은 쓰레기 객체가 됨.
System.out.println("-----------------------------");
System.out.println(Arrays.toString(names));
}
}
|
cs |
다음 코드를 보시면
1. Arrays.toString(배열명)을 사용하여
[ , , ] 이런 형태로 출력하고 있습니다.
2. for문을 사용해서 배열에 무엇이 들어갔는지 확인하고 있습니다.
2번에서 names[i].toString을 하나 names[i]를 하나
둘다 값 자체가 나오는데요,
String의 toString은 값 자체가 나오도록 오버라이딩 되어서 그렇습니다.
3. String변수 temp를 선언해주고 거기에
names[2]가 참조하는 주소를 넣었으니
temp도 names[2]와 같이 아이들이 들어있겠네요
6. names[0]이 참조하고 있던 박보검과의 참조를 끊고
슈화라는 새로운 객체를 참조하겠다고 합니다
그러니까 박보검은 참조하는 것이 없어져서 쓰레기 객체가 되어
HEAP영역을 유유히 떠돌다가 GC(Garbage Collector)에 의해 사라지게 됩니다.
출력결과입니다.
728x90
'JAVA > java 실습' 카테고리의 다른 글
[자바JAVA]일차원배열 - 버블소팅, 배열 오름차순으로 정렬하기, 내림차순 정렬하기 (0) | 2020.09.28 |
---|---|
[자바JAVA] 일차원 배열 - 배열 복사방법 for문, arraycopy, Arrays.copyOf, Arrays.copyOfRange (0) | 2020.09.28 |
[자바JAVA] 일차원배열 - 배열대로 출력하는 법 Arrays.toString, 배열의 주소값출력 (0) | 2020.09.27 |
[자바JAVA] 1차원 배열 - int배열 값들을 누적해서 합계와 평균 구하기 (0) | 2020.09.26 |
[자바JAVA] 반복문 - 중첩 for문으로 구구단 9단까지 출력하기 (0) | 2020.09.25 |