static void swap(int a, int b) { int temp = a; a = b; b = temp;}// mainint x = 1;int y = 2;swap(x, y);System.out.println(x + " " + y);
1 2
기본형은 값(복사본)이 전달됨 → 함수 안에서 바꿔도 바깥 x, y에 영향 없음
그래서 Java에서는 메서드로 두 기본형을 swap할 수 없음
다음 코드의 출력은? (mutable holder로 swap)
public class IntRef { int v;}static void swap(IntRef a, IntRef b) { int temp = a.v; a.v = b.v; b.v = temp;}// mainIntRef x = new IntRef();x.v = 1;IntRef y = new IntRef();y.v = 2;swap(x, y);System.out.println(x.v + " " + y.v);
2 1
참조형이라 주소가 복사됨 → a, b는 바깥 x, y와 같은 개체를 가리킴
개체 내부의 값(.v)을 바꾸므로 바깥에도 반영됨
Java는 기본형 포인터가 없어 이렇게 mutable holder(IntRef) 를 만들어야 swap 가능
다음 코드의 출력은? (참조 자체를 swap)
static void swap(IntRef a, IntRef b) { IntRef temp = a; a = b; b = temp;}// mainIntRef x = new IntRef();x.v = 1;IntRef y = new IntRef();y.v = 2;swap(x, y);System.out.println(x.v + " " + y.v);