https://better-clean-fast.tistory.com/9
지역 변수 착각
기초 알고리즘을 공부하던 중 아래와 같은 배열의 순서를 거꾸로 뒤집는 코드를 작성해보았다. import java.util.Scanner; public class ReverseArray { //자리를 바꾸는 method static void swap(int[] a,int idx..
better-clean-fast.tistory.com
이전 나의 글에 대해 해답을 알게 되어서 보완된 지식을 올린다.
자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 복사해서 넘겨준다.
매개변수의 타입이 기본형일 경우 기본형의 값 이 복사되겠지만,
매개변수의 타입이 참조형인 경우 인스턴스의 주소가 복사된다.
package project;
class Data {int x;}
public class Main {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x );
change(d.x);
System.out.println("main() : x = " + d.x );
}
static void change(int x) {
x = 1000;
System.out.println("change() : x = " + x);
}
}
아래와 같은 결과가 나온다.
main() : x = 10
main() : x = 1000
main() : x = 10
이 이유는 change에 들어간 매개 변수는 d.x에 들어있는 값을 복사한 것이기 때문이다.
즉 10이라는 값 자체가 들어간 것이다.
따라서 change에서 값을 아무리 바꾼들 d.x가 바뀌지는 않는다.
package project;
class Data {int x;}
public class Main {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x );
change(d);
System.out.println("main() : x = " + d.x );
}
static void change(Data d) {
d.x = 1000;
System.out.println("change() : x = " + d.x);
}
}
이와 같이 바꾼다면 어떻게 될까,
main() : x = 10
main() : x = 1000
main() : x = 1000
그렇다, d는 참조형 변수이기 때문에 '값이 저장된 주소'를 복사해서 매개변수로 전달하게 된다.
그렇기 때문에 메서드에서 정확히 값이 있는 곳의 값을 다시 설정해주었으므로 정확히 수정된것이다.
'JAVA > [JAVA]' 카테고리의 다른 글
생성자에서 다른 생성자 호출하기 (0) | 2022.10.24 |
---|---|
Optional 개념 및 사용법 (0) | 2022.10.23 |
JVM의 메모리 구조 (1) | 2022.10.23 |
배열.clone() (0) | 2022.10.17 |
equals()와 == 의 차이점 (0) | 2022.10.17 |