Java always passes arguments by value NOT by reference


Java always passes arguments by value NOT by reference.


Let me explain this through an example:

public class Main 
{
 public static void main(String[] args) 
{ 
 Foo f = new Foo("f");
 changeReference(f); // It won't change the reference! 
 modifyReference(f); // It will modify the object that the reference variable "f" refers to! 
 } 
 public static void changeReference(Foo a) 
 { 
 Foo b = new Foo("b"); a = b;
 } 
public static void modifyReference(Foo c) 
{
  c.setAttribute("c"); 
 } 
 }

I will explain this in steps:

  1. Declaring a reference named f of type Foo and assign it to a new object of type Foo with an attribute "f".
    Foo f = new Foo("f");

    enter image description here

  2. From the method side, a reference of type Foo with a name a is declared and it’s initially assigned to null.
    public static void changeReference(Foo a)

    enter image description here

  3. As you call the method changeReference, the reference awill be assigned to the object which is passed as an argument.
    changeReference(f);

    enter image description here

  4. Declaring a reference named b of type Foo and assign it to a new object of type Foo with an attribute "b".
    Foo b = new Foo("b");

    enter image description here

  5. a = b is re-assigning the reference a NOT f to the object whose its attribute is "b".enter image description here

  6. As you call modifyReference(Foo c) method, a reference c is created and assigned to the object with attribute "f".enter image description here
  7. c.setAttribute("c"); will change the attribute of the object that reference c points to it, and it’s same object that reference fpoints to it.enter image description here

I hope you understand now how passing objects as arguments works in Java🙂

About pacesettergraam

A good and realistic person

Posted on December 23, 2012, in Java and tagged , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: