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
