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() 함수 실행 후 메모리가 소멸하므로 영향을 받지 않는다.
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의 주소를 동일하게 가리킨다. 따라서 함수 실행 후 메모리가 소멸돼도 같은 주소값을 가리키기 때문에 영향을 받아 바뀐 값으로 출력된다.