일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이클립스 설정
- IE8
- jQuery
- 삼성 메모리
- Internet Explorer 8
- 옴니아2
- Windows 7
- Ajax
- 한메일 smtp
- IE 8
- 이클립스 플러그인
- ddos
- 파워블로그
- 윈도우 7
- Live Mesh
- USB 레지스트리
- 한메일 pop
- 한메일
- 오좀니아
- VMwareTools
- PDA
- 이클립스
- 오즈 옴니아
- VMware
- HP
- php
- 파블애드
- XP 설치
- HP 신제품
- DDos 전용 백신
- Today
- Total
엉망진창
CallByValue 와 CallByReferernce 본문
중요한 예제입니다
이런 곳에서 에러가 나면 찾에내기 힘든 부분입니다.
꼭 기억해두시는 것이 좋겠네요
==================================================================[답변]
1: public class StringBufferTest{
2: public static void main(String args[]){
3: StringBuffer a = new StringBuffer("A");
4: StringBuffer b = new StringBuffer("B");
5: operate(a,b);
6: System.out.println(a+ "," + b);
7: }
8:
9: static void operate(StringBuffer x, StringBuffer y){
10: x.append(y);
11: y = x;
12: }
13:}
-----------------------------------------------------------------------
CallByValue 와 CallByReferernce라는 것을 설명하기 위해서 사용하는 예제군요
이 두가지 호출방법은 아주 중요합니다
CallByValue는 data의 값(value)을 넘겨주고
CallByReferernce는 data의 주소(referernce)를 넘겨준다는 것을 기억하세요.
예제는 주소값이 넘어간다는 것을 확인하려는 것이지요
StringBuffer 객체 a, b, x, y 이렇게 네개가 있네요
3라인 에서 a 를 생성하네요
여기서 주의 깊게 생각할 것이 있는데요
메모리의 "xxx" 공간에 "A"를 저장하고 a 에는 "xxx" 를 넣어뒀다(참조하다)는 것이죠
그렇다면 4라인도 같은 식으로 실행되겟죠?
메모리의 "yyy" 공간에 "B"를 저장하고 b 에는 "yyy" 를 넣어둔다(참조하다).
a --------------------> xxx:A
b --------------------> yyy:B
이렇게 a는 xxx 주소를 가리키고(참조하고) 있고
b는 yyy 주소를 가리키고(참조하고) 있다는 말이지요
5라인에서 메서드를 호출하는 군요
여기서 넘겨지는 a와 b는 주소 즉 "xxx" 와 "yyy"를 넘겨주게 되죠
9라인을 보면 x 와 y 를 매게변수로 받습니다
x 에는 a 가 대칭되고, y 에는 b 가 대칭됩니다
x 에는 "A" 가 아닌 "A"를 담고있는 공간의 주소 "xxx"가 들어가고요
y 에는 "B" 가 아닌 "B"를 담고있는 공간의 주소 "yyy"가 들어가는 것이죠
결국 a와 x는 같은 곳을 가리키고 있겠고요
b와 y는 같은 곳을 가리키고 있겠네요
a ---------------> xxx:A <---------------- x
b ---------------> yyy:B <---------------- y
10라인을 보면 x에다가 y를 붙이죠. 정확히 말하자면
'x가 참조(가리키는)하는 주소의 값에 y가 참조하는 주소의 값을 붙여라' 라고
할 수 있겠네요. 그럼 xxx 공간에는 AB 라고 값이 들어가게 되겠네요
a ---------------> xxx:AB <---------------- x
b ---------------> yyy:B <---------------- y
11라인에서 y 에 x 를 대입합니다
여기서는 x 의 주소를 y 에 대입하여 y 도 "xxx"를 참조하게되는 것이죠
a ---------------> xxx:AB <---------------- x, y
b ---------------> yyy:B
6라인에서 a 값과 b 값을 출력하네요
결과는 "AB, B" 이렇게 나오겠죠?
11라인 다음에 x 와 y 값을 출력해보면 "AB,AB"가 나와야 하겠지요
왜냐하면 둘다 모두 xxx:AB를 참조하고 있으니까요
네이버 지식인 중 korea_zeus 님의 답변입니다.
'Study > Java' 카테고리의 다른 글
이클립스 V3.4 완전 정복 from www.ibm.com (0) | 2008.12.28 |
---|---|
[이클립스 플러그인] - 이클립스 메모리 플러그인 Eclipse Status Monitor (0) | 2008.12.12 |
추상클래스(abstract)와 인터페이스(Interface)를 사용하는 목적 (1) | 2008.08.25 |
Map(HashMap, TreeMap, Hashtable) (0) | 2008.03.04 |
메소드 구문 (0) | 2008.01.25 |