자바는 항상 변수의 값을 복사해서 대입한다
int, long, double, boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
int a = 10;
int b = a; // 10을 복사해서 저장
그렇다변
int a = 10;
int b = a;
System.out.println("a = " + a); // 10
System.out.println("b = " + b); // 10
a = 20;
System.out.println("a = " + a); // 20
System.out.println("b = " + b); // 10
public class MethodChange {
public static void main(String[] args) {
int a = 10;
System.out.println("a = " + a); // 10
changePrimitive(a);
System.out.println("a = " + a); // 10
}
public static void changePrimitive(int x) {
x = 20;
}
}
changePrimitive 파라미터 x엔 "10"이 복사되어 전달된다
따라서 x의 값을 변환해도 a에는 영향이 없다.
Student student1, int[] students와 같이 데이터에 접근하기 위한 참조값(주소)을 저장하는 데이터 타입
String도 참조형이다.
자주 사용하기 때문에 특별히 편의 기능(계산 등)을 제공한다
Student s1 = new Student(); // x001
Student s2 = s1; // x001
Student s1 = new Student(); // x001
Student s2 = s1; // x001
s1.value = 10;
System.out.println("s1.data = " + s1.data); // 10
System.out.println("s2.data = " + s2.data); // 10
s1.data == x001.data
s2.data == x001.data
이므로 같은 값을 가진다
public class MethodChange {
public static void main(String[] args) {
Data a = new Data();
a.value = 10;
System.out.println("a.value = " + a.value); // 10
changeReference(a);
System.out.println("a.value = " + a.value); // 20
}
public static void changeReference(Data x) {
x.value = 20;
}
}
메서드 파라미터 x에는 주소가 복사되어 전달되기 때문에
a.value(x001.value) = 10
-> x001이 x로 전달
-> x.value(x001.value) = 20
이므로 a의 value(x001.value)도 20으로 출력된다