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, 2, 5);
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
'IT > Java' 카테고리의 다른 글
09_클래스 : 접근제한자(Access Modifier), static 멤버(정적 멤버), 싱글톤(singleton), final, 상수, getters and setters (0) | 2019.12.08 |
---|---|
08_클래스 : 필드, 생성자, 메소드 (0) | 2019.12.07 |
06_참조형 데이터 타입 (0) | 2019.12.01 |
05_중복 없이 로또 번호 추출(조건문, Math.random()) (0) | 2019.11.30 |
04_String 연산자 (0) | 2019.11.29 |