본문 바로가기

IT/Java

07_배열

01. 참조타입 배열

 

앞서, String 타입의 데이터는 문자열의 내용이 같으면 최초에 생성한 객체를 재활용한다고 한 적이 있다.

String 타입의 배열도 마찬가지이다.

 

strArray[0] = "Java"; 라는 코드에 의해, "Java"라는 String 객체가 Heap 영역에 생성된다.

strArray[1] = "Java"; 라는 코드는  새 문자열을 또 만드는 것이 아니라 위에서 생성된 "Java"라는 문자열을 재사용한다.

그러나 strArray[2]의 값은 new String을 사용하여 초기화시키고 있으므로 새로운 "Java"라는 문자열이 생성된다.

 

== 연산자는 객체의 주소값 자체를 비교하며 .equals는 문자열의 내용만을 비교한다고 하였다.

따라서 아래의 코드는 순서대로 [true, false, true]의 결과를 출력하게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ArrayReferenceObjectExample {
    public static void main(String[] args) {
        String[] strArray = new String[3];
        strArray[0= "Java";
        strArray[1= "Java";
        strArray[2= new String("Java");
        
        System.out.println(strArray[0== strArray[1]);
        System.out.println(strArray[0== strArray[2]);
        System.out.println(strArray[0].equals(strArray[2]));
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

02. 배열 복사

어떤 배열의 원소들을 다른 배열에 그대로 복사하고 싶을 때, 아래처럼 for문을 이용할 수도 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ArrayCopyByForExample {
    public static void main(String[] args) {
        int[] oldIntArray = {1,2,3};
        int[] newIntArray = new int[5];
        
        for(int i=0; i<oldIntArray.length ; i++) {
            newIntArray[i] = oldIntArray[i];
        }
        
        for(int i=0; i<newIntArray.length; i++) {
            System.out.print(newIntArray[i] + ", ");
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

그러나 자바에서는 System.arraycopy(src, srcPos, dest, destPos, length); 라는 아주 편리한 메소드를 제공한다.

 

src : Source, 즉 원본을 뜻한다.

srcPos : 원본의 어느 부분 부터 복사해올지를 뜻한다.

dest : Destination, 즉 목적지(사본)을 뜻한다.

destPos : dest의 몇 번 인덱스 부터 복사해온 값을 사용할지를 뜻한다.

length : 복사해올 값의 길이를 뜻한다. 예를 들어 length를 2로 지정하면 두 개의 값을 복사해온다.

 

아래의 코드를 보면

days배열의 값을 1번 인덱스 부터 복사하여

weekdays의 2번 인덱스 부터 총 5개까지 붙여넣기 한다.

출력 결과는?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ArrayCopyExample2 {
    public static void main(String[] args) {
        String[] days = {"Sun""Mon""Tue""Wed""Thu""Fri""Sat"};
        
        String[] weekdays = new String[7];
        
        System.arraycopy(days, 1, weekdays, 25);
        
        for(int i=0; i < weekdays.length; i++) {
            System.out.print(weekdays[i] + ", ");
        }
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

결과 : null, null, Mon, Tue, Wed, Thu, Fri