JAVA/java 실습

[자바JAVA] 1차원 배열 - String배열 (2차원배열과 동일)

자바칩 프라푸치노 2020. 9. 27. 15:48

안녕하세요 이번에는 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