자바

JAVA 자바 객체를 참조하는 배열

알통몬_ 2017. 3. 12. 18:54
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

참조  타입 배열(클래스, 인터페이스)은 각 항목에 객체의 번지를 가지고 있습니다. 

예를 들어 String 은 클래스 타입이므로 String[]배열은 String 객체의 주소를 가지고 있습니다. 

즉 String 객체를 참조합니다.


String[] 배열 항목 간의 문자열을 비교하려면 equals()연산자를 사용해야 합니다. 

== 연산자는 객체 번지를 비교 => 문자열 비교 불가.


예제)

public class Example {

public static void main(String[] args) {

String[] strArray = new String[3];

strArray[0] = naver";

strArray[1] = "naver";

strArray[2] = new String("naver");


System.out.println( strArray[0] == strArray[1]);

System.out.println( strArray[0] == strArray[2] );    

System.out.println( strArray[0].equals(strArray[2]) );

}

 



배열 복사

 배열은 한 번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장 공간이 필요하다면

보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야 합니다. 


for문을 사용한 배열 복사

예제)

public class Example {

public static void main(String[] args) {

int[] oldIntArray = { 10, 20, 30 };

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] + ", ");

}

}

}

복사되지 않은 값은 배열 기본 초기값 0으로 유지됨.



System.arraycopy()메소드를 사용한 배열 복사

예제)

public class Example {

public static void main(String[] args) {

String[] oldStrArray = { "naver", "blog", "post" };

String[] newStrArray = new String[5];

System.arraycopy( oldStrArray, 0, newStrArray, 0, oldStrArray.length);

for(int i=0; i<newStrArray.length; i++) {

System.out.print(newStrArray[i] + ", ");

}

}

}

얕은 복사(shallow copy) :참조 타입 배열의 경우 복사되는 값이 객체의 번지이므로 

새 배열의 항목은 이전 배열의 항목이 참조하는 객체와 동일.

깊은 복사(deep copy) : 참조하는 객체도 별도로 생성하는 것

반응형