코드 설명:
class A {
int x;
}
public class Eunwoo {
public static void main(String[] args) {
A a = new A(); // 새로운 A 객체 생성
a.x = 50; // a.x에 50을 할당
change1(a.x); // a.x의 값(50)을 change1 메소드로 전달
System.out.println(a.x); // a.x의 값 출력 (50 출력)
change2(a); // 객체 a의 참조를 change2 메소드로 전달
System.out.println(a.x); // a.x의 값 출력 (100 출력)
}
static void change1(int x) {
x = 100; // 로컬 변수 x 값 변경 (a.x는 영향 없음)
System.out.println(x); // 100 출력
}
static void change2(A a) {
a.x = 100; // 객체 a의 x 값 변경
System.out.println(a.x); // 100 출력
}
}
실행 결과 설명:
1. a.x는 처음에 50으로 설정됩니다.
2. change1(a.x) 메소드는 값 자체를 넘겨주기 때문에 로컬 변수 x만 100으로 변경되고, a.x는 여전히 50입니다.
3. System.out.println(a.x);는 change1 호출 후에 a.x가 변하지 않았기 때문에 50을 출력합니다.
4. change2(a)는 객체 a의 참조를 넘겨주므로 실제로 a.x의 값이 100으로 변경됩니다.
5. System.out.println(a.x);는 change2 호출 후 a.x가 100으로 변경되었기 때문에 100을 출력합니다.
실행 결과:
100
50
100
이미지에서 손으로 적힌 내용은 값 전달(call by value)과 참조 전달(call by reference)의 차이를 설명하며, 위 코드의 실행 흐름과 일치합니다.
'전산 관련 시험 > 프로그래밍(C, JAVA, Python)' 카테고리의 다른 글
[JAVA] 프로그래밍 언어 (ex. 28) (0) | 2024.10.15 |
---|---|
[JAVA] 프로그래밍 언어 (ex. 30) (1) | 2024.10.15 |
[JAVA] 프로그래밍 언어 (ex. 22) (0) | 2024.10.10 |
[JAVA] 프로그래밍 언어 (ex. 21) (0) | 2024.10.07 |
[JAVA] 접근제어자 종류(private, public, protected 등)와 접근범위 (1) | 2024.10.07 |
댓글