JAVA에서 call by reference 에 대해서 궁금합니다.
글쓴이: cromkhc / 작성시간: 토, 2005/06/04 - 6:52오후
class F { public int X; public int Y; public int Z; public F(int arg1, int arg2, int arg3) { X = arg1; Y = arg2; Z = arg3; }; }; public class FTest { public static void main(String[] args) { int A=22, B=32; int C=A+B; //reference 방식에서 필요한 임시기억장소 f_val(C,A,A); System.out.printf("F_val()is called\n"); System.out.printf("A+B= %d, A=%d, A=%d\n\n", C, A, A); F obj = new F(C, A, A); //F 클래스의 객체를 가리킬 수 있는 레퍼런스 obj 선언 f_ref(obj); System.out.printf("F_ref()is called\n"); System.out.printf("C= %d, A=%d, A=%d\n", obj.X, obj.Y, obj.Z); } //call by value public static void f_val(int X, int Y, int Z) { Y = Y + 1; Z = Z + X; } //call by reference public static void f_ref(F obj) { obj.Y = obj.Y + 1; // *Y == *Z(같은 주소) 이므로, *Y=23이 되면서 *Z=23이 됨. obj.Z = obj.Z + obj.X; // *Z + *X, 23 + 54 = 77 } }
주석을 보다시피 C로 짜면 Y와 Z가 같은 A로 호출을 하기 때문에
주소가 같아서 Y가 23이면서 Z도 23이되고 Z에서 X가 더해지면서
77이면 되면서, 다시 Y도 77이 됩니다.(주소가 같으니까)
그런데 자바에서는 Y가 23이 되면서 그냥 Y=23을 리턴하고
Z는 그냥 22+54가 되면서 76을 리턴합니다.
자바는 영 정이 안가네요...
call by value는 함수 밖을 벗어나면 영향을 끼치지 않아서
C와 같은 값이 나오는데요...
reference 부분에서 안되네요....
고수님들 도와주세요~~~~
악플이라도 좋으니 리플 팍팍 달아주세요
Forums:
//call by reference :지원 하지 않음.Java: ca
//call by reference :지원 하지 않음.
Java: call by value only
A,B,C가 primitive type이기 때문입니다.A가 ref
A,B,C가 primitive type이기 때문입니다.
A가 reference였다면 말씀하신대로 수행됐을 겁니다.
댓글 달기