to a certain extent one could say that when you pass a reference to an object into a 
method, the reference itself (the pointer to/memory address of the object) is passed 
by value (copied) like a primitive.

A variable in Java is much like a pointer variable in C/C++, except that in Java, the 
language automatically "dereferences" the pointer for you (the * operator in  C/C++) 
so that you can never access the memory directly. Try to picture the memory footprint 
behind your sample in the fill-Method, at the time just before you assign fillMe to an 
new Integer. The to variables intFill and fillMe are on the stack, say at memory 
address 100 and 200. At theese two memory addresses you have the same value, the 
address of the original new Integer(200) object which might be 5000.

Memory Address|MemoryContent
--------------+--------------------------
0
...
100            5000 (intFill)
...
200            5000 (fillMe)
...
5000           beginning of the new Integer(200) Object
5100           end of the new Integer(200) Object
...

Now when you assign fillMe to a new Integer(100) Object what happens?

Memory Address|Memory Content
--------------+--------------------------
0
...
100            5000 (intFill)
...
200            7000 (fillMe)
...
5000           beginning of the new Integer(200) Object
5100           end of the new Integer(200) Object
...
7000           beginning of the new Integer(100) Object
7100           end of the new Integer(100) Object
...


The contens of the fillMe-variable changes. The object intFill is pointing to is NOT 
changed. In your String fill method however, you change the contents of the String 
object (the Object at address 5000) not the contents of the fillMe-Variable. Since the 
stringFill is also pointing to address 5000 you see the change outside the method.

Do you see what I mean?

-----Urspr�ngliche Nachricht-----
Von: H Shankaranarayanan [mailto:[EMAIL PROTECTED]]
Gesendet: Freitag, 31. Mai 2002 12:11
An: JDJList
Betreff: [jdjlist] RE: AW: Java : pass by reference???


But a variable is all u have to handle a object rite?
so for me a variable is an object of course unless its a primitive.
I am not convinced here. If you  could explain it in a better way
it would be great.


-----Original Message-----
From: Lesden, Kim [mailto:[EMAIL PROTECTED]]
Sent: Friday, May 31, 2002 3:33 PM
To: JDJList
Subject: [jdjlist] AW: Java : pass by reference???


Shankar, you always pass Objects by reference, only primitives (int, char,
...) are passed by value since they are not real objects in Java. In your
sample, you mix up variables and objects. Variables are just names for
objects.

When you call a method with parameters you pass the object behind the
variable not the variable itself. The parameter variable within the
fill-method (fillMe) is not the same as the local variable in the main
method (intFill). When the fill-Method is called the value of the
intFill-Variable, which is a reference to an Integer-Object, is copied to
fillMe-Variable. Changing the value of the intFill-Variable to a reference
to a new Integer-Object does not change the value of the intFill-Variable.
It is still referencing/pointing to the original Integer-Object.

Regards,
Kim

-----Urspr�ngliche Nachricht-----
Von: H Shankaranarayanan [mailto:[EMAIL PROTECTED]]
Gesendet: Freitag, 31. Mai 2002 09:31
An: JDJList
Betreff: [jdjlist] Java : pass by reference???


class test
{
    /**
     *  Description of the Method
     *
     *@param  fillMe  Description of the Parameter
     */
    public void fill(String fillMe)
    {
        fillMe = "test";
    }


    /**
     *  Description of the Method
     *
     *@param  fillMe  Description of the Parameter
     */
    public void fill(Integer fillMe)
    {
        fillMe = new Integer(100);
    }


    /**
     *  Description of the Method
     *
     *@param  args  Description of the Parameter
     */
    public static void main(String args[])
    {

        try
        {
            test objTest = new test();
            String testfill = new String("main");
            objTest.fill(testfill);
            System.out.println("Fill me result:" + testfill);

            Integer intFill = new Integer(200);
            objTest.fill(intFill);
            System.out.println("Fill me result:" + intFill);

        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}


That is a sample program i wrote to test this fact. The result is dependent
on scope of the variable.
So wots this pass by reference concept that every text book around the world
states about Java.

How does the pass by reference concept work anyways?

I might have missed something here. If i did i would appreciate if anyone
told me wot is it that i did miss.

I was expecting this program to work otherwise but it does not.

--Shankar


To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm

To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm


To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm

To change your membership options, refer to:
http://www.sys-con.com/java/list.cfm

Reply via email to