TIL

TIL - 230804

nayeonee__ 2023. 8. 11. 23:02

배열의 복사

[얕은 복사] 주소값 복사


  1. B = A;
class Main {
  public static void main(String[] args) {
    int a[] = {1, 8, 3}; 
    int b[] = a;     

    b[0] = 10; 

    // 결과 확인
    System.out.print("a Array : "); 
    for (int v:a) 
        System.out.print(v + " "); 

    System.out.print("\nb Array : "); 
    for (int v:b) 
        System.out.print(v + " "); 
  }
}

[결과]

a Array : 10 8 3 
b Array : 10 8 3

 

[깊은 복사] 복제. 새로운 메모리 공간에 값 복사

2. B = A.clone();

  • clone();
    • Object 클래스의 clone() 메소드는 자신을 복제하여 새로운 인스턴스를 생성하는 일 
    • 단순히 인스턴스 변수의 값만 복사하기 때문에 참조 타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않는다.
      package 자바의_정석.ch05;
      
      public class ArrayEx4 {
          public static void main(String[] args) {
              char[] abc = {'A', 'B', 'C', 'D'};
              char[] num = {'0','1', '2', '3', '4', '5', '6', '7', '8', '9'};
              System.out.println(abc);
              System.out.println(num);
      
              // 배열 abc 와 num 을 붙여서 하나의 배열 (result) 로 만든다.
              char[] result = new char[abc.length + num.length];
              System.arraycopy(abc , 0, result, 0 , abc.length);
              System.arraycopy(num, 0, result, abc.length, num.length);
              System.out.println(result);
      
              //배열 abc를 배열 num 의 첫 번째 위치부터 배열 abc 의 길이만큼 복사
              System.arraycopy(abc, 0, num, 0 , abc.length);
              System.out.println(num);
      
              // number 의 인덱스 6 위치에 3개를 복사
              System.arraycopy(abc, 0, num, 6, 3);
              System.out.println(num);
          }
      }
      

[결과]

a Array : 1 8 3 
b Array : 10 8 3

 

 

 

3. System.arraycopy(A, sourcePos, B, destPos, len);

  • Object A : 복사할 대상
  • int sourcePos : 복사할 배열(A)의 시작 index
  • Object B : 복사될 곳
  • int destPos : 복사될 곳(B)의 시작 index
  • int len : 복사할 길이(원소 개수)
package 자바의_정석.ch05;

public class ArrayEx4 {
    public static void main(String[] args) {
        char[] abc = {'A', 'B', 'C', 'D'};
        char[] num = {'0','1', '2', '3', '4', '5', '6', '7', '8', '9'};
        System.out.println(abc);
        System.out.println(num);

        // 배열 abc 와 num 을 붙여서 하나의 배열 (result) 로 만든다.
        char[] result = new char[abc.length + num.length];
        System.arraycopy(abc , 0, result, 0 , abc.length);
        System.arraycopy(num, 0, result, abc.length, num.length);
        System.out.println(result);

        //배열 abc를 배열 num 의 첫 번째 위치부터 배열 abc 의 길이만큼 복사
        System.arraycopy(abc, 0, num, 0 , abc.length);
        System.out.println(num);

        // number 의 인덱스 6 위치에 3개를 복사
        System.arraycopy(abc, 0, num, 6, 3);
        System.out.println(num);
    }
}

[결과]

ABCD
0123456789
ABCD0123456789
ABCD456789
ABCD45ABC9

 

 

💡 String 클래스는 char 배열에 기능(메서드)을 추가한 것이다.

 

'TIL' 카테고리의 다른 글

TIL - 230815  (0) 2023.08.15
TIL - 230810  (1) 2023.08.11
TIL -230808  (0) 2023.08.11
TIL - 230807  (0) 2023.08.11
TIL - 230803  (0) 2023.08.11