[Java] 객체배열

업데이트:

기본자료형 배열과 참조 자료형 배열(객체 배열)

int[] arr = new int[10];



Book[] library = new Book[5]; //선언 방법



나중에 생성할 객체의 주소값을 담는다.

public class BookArrayTest {

	public static void main(String[] args) {

		Book[] library = new Book[5]; // 책이 5권이 생긴것이아니라 배열이 생긴것이다. 
		
		//책이 5권이 생기려면 다섯번 new를해야한다
		library[0] = new Book("태백산맥1","조정레");
		library[1] = new Book("태백산맥2","조정레");
		library[2] = new Book("태백산맥3","조정레");
		library[3] = new Book("태백산맥4","조정레");
		library[4] = new Book("태백산맥5","조정레");

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

			System.out.println(library[i]); //address값이 출력이된다.
			library[i].showBookInfo();//값이 출력된다.
		}

	}
}

System.arraycopy(src, srcPos, dest, destPos, length); 예제

public class ArrayCopy {

	public static void main(String[] args) {
		int[] arr1 = { 10, 20, 30, 40, 50 };
		int[] arr2 = { 1, 2, 3, 4, 5 };

		System.arraycopy(arr1, 0, arr2, 1, 3);
		// arr1의 0번째부터 3개(10, 20, 30)가
		// arr2의 1번째 부터 3개(2, 3, 4)자리로 copy된다.

		for (int i = 0; i < arr2.length; i++) {
			System.out.println(arr2[i]); // 1, 10, 20, 30, 5
		}

	}

}

향상된 for문(enhanced for)

배열 요소의 처음부터 끝까지 모든 요소를 참조 할 때 편리한 반복문

for(변수 : 배열) 배열의 length만큼 변수에 element 값을 넣겠다.

for(Book book : copyLibrary)

객체 배열 복사

얕은 복사



인스턴스가 같다

//얕은 복사 예제

public class ObjectCopy {

	public static void main(String[] args) {
		Book[] library = new Book[5];
		Book[] copyLibrary = new Book[5];

		library[0] = new Book("태백산맥1", "조정레");
		library[1] = new Book("태백산맥2", "조정레");
		library[2] = new Book("태백산맥3", "조정레");
		library[3] = new Book("태백산맥4", "조정레");
		library[4] = new Book("태백산맥5", "조정레");

		System.arraycopy(library, 0, copyLibrary, 0, 5);

		library[0].setTitle("나목");
		library[0].setAuthor("박완서");

		for (Book book : library) {
			book.showBookInfo();
		}

		System.out.println("===================");

		for (Book book : copyLibrary) {
			book.showBookInfo(); //같이 바뀌었다.
		}
	}

}

깊은 복사



인스턴스가 다르다.

//깊은복사 예제

public class ObjectCopy2 {

	public static void main(String[] args) {
		Book[] library = new Book[5];
		Book[] copyLibrary = new Book[5];

		library[0] = new Book("태백산맥1", "조정레");
		library[1] = new Book("태백산맥2", "조정레");
		library[2] = new Book("태백산맥3", "조정레");
		library[3] = new Book("태백산맥4", "조정레");
		library[4] = new Book("태백산맥5", "조정레");

		copyLibrary[0] = new Book();
		copyLibrary[1] = new Book();
		copyLibrary[2] = new Book();
		copyLibrary[3] = new Book();
		copyLibrary[4] = new Book();

		for (int i = 0; i < library.length; i++) {
			copyLibrary[i].setTitle(library[i].getTitle());
			copyLibrary[i].setAuthor(library[i].getAuthor());

		}

		library[0].setTitle("나목");
		library[0].setAuthor("박완서");

		for (Book book : library) {
			book.showBookInfo();
		}

		System.out.println("===================");

		for (Book book : copyLibrary) {
			book.showBookInfo(); // 바뀌지 않았다.
		}
	}

}


태그: ,

카테고리:

업데이트: