JAVA에서 call by reference 에 대해서 궁금합니다.

cromkhc의 이미지

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 부분에서 안되네요....
고수님들 도와주세요~~~~
악플이라도 좋으니 리플 팍팍 달아주세요

익명 사용자의 이미지

//call by reference :지원 하지 않음.
Java: call by value only

kukyakya의 이미지

A,B,C가 primitive type이기 때문입니다.

A가 reference였다면 말씀하신대로 수행됐을 겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.