
지역 변수
매개 변수
인스턴스 변수
클래스 변수
기본형은 값 그 자체를 가지는 변수
기본형은 스택 메모리나 스태틱 메모리에 값을 저장한다.
정수형 : byte, short, int, long, char
소수형 : float, double
기타 : boolean
매개 변수로 기본형이 들어왔을 때, 값만 복사하여 새로운 스택 메모리를 할당한다.
따라서 매개변수에 들어온 기존 값이 변경되더라도 기존 변수 값이 변경되지 않는다.
참조형은 객체의 주소를 가지는 변수
참조형은 실제 객체는 힙 메모리에 저장하고 스택 메모리나 스태틱 메모리에 해당 객체의 주소를 저장한다.
매개 변수로 참조형이 들어왔을 때, 주소 값이 넘어오는 것이므로 해당 주소 값에 있는 값을 변경하게 되면 기존 객체에도 영향을 미친다.
객체 내에 있는 값이 다른 메서드로 전달됐을 때 변경되는 걸 막기 위한 방법으로 불변 객체가 있다.
class A {
int n;
public A(int n) {
this.n = n;
}
public void setNumber(int n) {
this.n = n;
}
}
public static void main(String[] args) {
A a = new A(10);
action(a);
}
public static void action(A a) {
// 1. 주소 값을 통해 필드 값 변경은 가능
a.setNumber(15);
// 2. 객체 자체를 변경하는 것은 불가능
a = new A(15);
}