변수의 타입에는 2가지가 있다. 기본형과 참조형
변수의 값을 읽기만 할 수 있다. (only read만 가능)
class Data{int x;}
class Ex {
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("After 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
change() : x = 1000
After change(d.x)
main() : x = 10
들은대로 적기 (자바의 정석 62)
=> 다시 듣고 고칠 예정
main이 스택에 올라감 - 프로그램 실행
main에 참조변수 d 생성되고 Data 객체를 생성
class Data에는 멤버 int x 하나 존재
x의 주소값은 0x100
Data값이 변수 d에 저장, d의 주소값도 0x100이 된다
d.x, 즉 참조변수 d가 가리키는 x 값은 10
d.x 값을 println으로 표현하면 10
=> main() : x = 10 출력 //6번째 줄
change 메소드 호출 //(11번째 줄로 이동)
change int x에 d.x 값 10이 대입된다 //(현재 change int x값은 10)
그 다음 change 메소드의 문장 실행, x=1000 //지역변수x에 1000이 저장된다 (change int x값은 1000)
=> change() :x = 1000 출력 //13번째 줄, 여기서 x는 제일 가까운 x가 출력되기 때문에 지역변수x가 출력된다
change 문장을 다 수행했으니 호출한 곳으로 돌아간다 -change메소드 사라지고 밑에 대기하고 있던 메인메소드 실행
After change(d.x) 출력 //8번째 줄 - println 메소드 실행
After change가 출력되고 println 메소드 종료
메인 메소드로 돌아가고 새로운 println 메소드 실행, main 메소드 x값이 출력된다 아까 x값은 10
=> main() : x = 10 출력 //9번째 줄
변수의 값을 읽고 변경할 수 있다. (read & write 가능)
class Data2{int x;}
class Ex2 {
public static void main(String[] args) {
Data2 d=new Data2();
d.x=10;
System.out.println("main() :x = "+d.x);
change(d);
System.out.println("After change(d)");
System.out.println("main() :x = "+d.x);
}
static void change(Data2 d) { //참조형 매개변수-기본형이 아니면 참조형임
d.x=1000;
System.out.println("change() :x = "+d.x);
}
}
//결과값
main() : x = 10
change() : x = 1000
After change(d)
main() : x = 1000
들은대로 적기 (자바의 정석 63)
=> 다시 듣고 고칠 예정
main이 스택에 올라감 - 프로그램 실행
main에 참조변수 d 생성되고 Data2 객체를 생성
class Data에는 멤버 int x 하나 존재
x의 주소값은 0x100
Data값이 변수 d에 저장, d의 주소값도 0x100이 된다
d.x, 즉 참조변수 d가 가리키는 x 값은 10
d.x 값을 println으로 표현하면 10
=> main() : x = 10 출력 //6번째 줄
change 메소드 호출 //(11번째 줄로 이동)
change Data2 d, d가 메인메소드의 d.x를 가리킨다 //d가 메인 메소드 d.x와 같은 주소값0x100, 값 10 가진다
그 다음 change 메소드의 문장 실행, 참조변수 d가 가리키는 x에 1000을 대입한다 //메인메소드 d.x에 1000이 저장된다
=> change() :x = 1000 출력 //13번째 줄,
change 문장을 다 수행했으니 호출한 곳으로 돌아간다 -change메소드 사라지고 밑에 대기하고 있던 메인메소드 실행
After change(d) 출력 //8번째 줄 - println 메소드 실행
After change가 출력되고 println 메소드 종료
메인 메소드로 돌아가고 새로운 println 메소드 실행, main 메소드 d.x값이 출력된다 아까 d.x값은 1000
=> main() : x = 1000 출력 //9번째 줄