변수 타입에 따른 메모리 저장공간

rami·2023년 10월 12일
0

Today I Learned

목록 보기
29/34

Primitive type

public class Main {
    public static void main(String[] args) {
        int a = 5;
        int b = 3;
        
        swap(a, b);
        System.out.println(a + ", " + b);
    }


    public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }
}

print(a,b)하면 변화 없이 a=5, b=3이 나온다.
swap() 함수 실행 후 메모리가 소멸하므로 영향을 받지 않는다.


Reference type

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> arr = new ArrayList<>();
        arr.add(5);
        arr.add(3);
        
        swap(arr);
        System.out.println(arr.get(0) + ", " + arr.get(1));
    }


    public static void swap(ArrayList<Integer> arr) {
        if (arr.size() == 2) {
            int temp = arr.get(0);
            arr.set(0, arr.get(1));
            arr.set(1, temp);
        }
    }
}

print(arr[0], arr[1])하면 변화된 값으로 arr[0]=3, arr[1]=5가 나온다.
stack에 두개의 arr은, heap의 ArrayList의 주소를 동일하게 가리킨다. 따라서 함수 실행 후 메모리가 소멸돼도 같은 주소값을 가리키기 때문에 영향을 받아 바뀐 값으로 출력된다.

profile
앞으로 나아가는 사람

0개의 댓글