Java parameter is pass by value

In Java, when a parameter is pass to a method, the parameter is passed by value. Here is an example that demonstrates parameters are passed by value in Java methods.

The Animal class

public class Animal {
        
        private String animal;
        
        public Animal(String a)
        {
                animal=a;
        }
        
        public String getAnimal() {
                return animal;
        }

        public void setAnimal(String animal) {
                this.animal = animal;
        }
        
        public String toString()
        {
                return "The animal is: " + this.getAnimal();
        }
        
}

The PassByValueTest

public class PassByValueTest {
    /* Java is pass-by-value.
     * For primitives, you pass a copy of the actual value.
     * For reference of objects, you pass a copy of the reference.
     */
    public static void main(String args[])
    {
        Animal a = new Animal("Bird");
        //As expected, it will print the animal is Bird.
        System.out.println(a.toString());

        changeAnimal(a);
        // Now, it will print the animal is Dog because the object reference 
        // by a was changed in the method changeAminal.So, any other reference 
        // to this object will see the changes.");
        System.out.println(a.toString());
        System.out.println("-----------------------------------");


        Animal b = new Animal("Bird");
        //As expected, it will print the animal is Bird.
        System.out.println(b.toString());


        changeReference(b);
        // Now, it will print the animal is Bird again, because the method 
        // changeReference changes the reference, so it's creating a new 
        // reference that points to a new object, the object referenced by 
        // the original reference is unchanged.");
        System.out.println(b.toString());
        System.out.println("-----------------------------------");

        // x doens't change, because it copies the value to the 
        // changeInt method, the value in the method are separate 
        // from the original value."); 
        int x=3;
        System.out.println("x is: " + x);
        changeInt(x);
        System.out.println("x is: " + x);

    }

    public static void changeAnimal(Animal animal)
    {
        //Copies the reference of animal to b, 
        //so now animal and b both pointing to the same object.
        Animal b = animal;
        b.setAnimal("Dog");
    }

    public static void changeReference(Animal animal)
    {
        Animal c = animal;
        c= new Animal("Cat");
    }

    public static void changeInt(int y)
    {
        int z=y;
        z=5;
    }


}

The output:

    The animal is: Bird
    The animal is: Dog
    ———————————–
    The animal is: Bird
    The animal is: Bird
    ———————————–
    x is: 3
    x is: 3

Search within Codexpedia

Custom Search

Search the entire web

Custom Search