본문 바로가기
Algorithm/Do it 자료구조와 함께 배우는 알고리즘 입문

[Algorithm] 각 타입의 초깃값, 배열 복제 Java

by 준그래머 2021. 3. 31.
반응형

<초깃값>

초깃값
byte (byte) 0
short (short) 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean false
reference 형 ex) String "" 또는 null

 

배열 복제 코드

import java.util.Arrays;

public class Chap_02_exercise_2_3 {
    public static void main(String[] args) {
        int [] a = {1, 2, 3, 4, 5};
        int [] b = a;
        int [] c;

        System.out.println("-------------- a = b --------------");
        System.out.println("a: " + Arrays.toString(a));
        System.out.println("b: " + Arrays.toString(b));
        System.out.println();

        b[3] = 0;

        System.out.println("-------------- b[3] = 0 --------------");
        System.out.println("a: " + Arrays.toString(a));
        System.out.println("b: " + Arrays.toString(b));
        System.out.println();

        c = a.clone();

        System.out.println("-------------- c = a.clone() --------------");
        System.out.println("a: " + Arrays.toString(a));
        System.out.println("c: " + Arrays.toString(c));
        System.out.println();

        c[3] = 4;
        System.out.println("-------------- c[3] = 4 --------------");
        System.out.println("a: " + Arrays.toString(a));
        System.out.println("c: " + Arrays.toString(c));
        System.out.println();

    }
}

 

출력

 

a = b를 한 경우 a가 가리키는 주소를 그대로 b도 똑같이 가리킨다. 그래서 b[3] = 0을 했을때, a와 b가 가리키고 있는 곳이 같아서 a[3]도 똑같이 0으로 출력된다.

 

c = a.clone()을 통해 c에 a를 복제해서 넣어주면 a = b와 같은 값으로 출력된다. 하지만 clone() 함수의 경우 복제된 데이터는 내부적으로 서로 다른 메모리 주소를 사용하고 대신 같은 크기의 같은 주소를 가리키는 데이터가 들어있는 새로운 데이터를 만들어주는 함수이므로 c[3] = 4를 해도 a[3]에는 변화가 없다.

 

 

 

반응형