Call by value and Call by reference in Java


Call by Value means calling a method with a parameter as value. Through this, the argument value is passed to the parameter.

While Call by Reference means calling a method with a parameter as a reference. Through this, the argument reference is passed to the parameter.

In call by value, the modification done to the parameter passed does not reflect in the caller's scope while in the call by reference, the modification done to the parameter passed are persistent and changes are reflected in the caller's scope.

Following is the example of the call by value −

The following program shows an example of passing a parameter by value. The values of the arguments remain the same even after the method invocation.

Example - Call By Value

public class Tester{
   public static void main(String[] args){
      int a = 30;
      int b = 45;
      System.out.println("Before swapping, a = " + a + " and b = " + b);
      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("
**Now, Before and After swapping values will be same here**:");       System.out.println("After swapping, a = " + a + " and b is " + b);    }    public static void swapFunction(int a, int b) {       System.out.println("Before swapping(Inside), a = " + a + " b = " + b);       // Swap n1 with n2       int c = a;       a = b;       b = c;       System.out.println("After swapping(Inside), a = " + a + " b = " + b);    } }

Output

This will produce the following result −

Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30
**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45

Example - Call By Reference

Java uses only call by value while passing reference variables as well. It creates a copy of references and passes them as valuable to the methods. As reference points to same address of object, creating a copy of reference is of no harm. But if new object is assigned to reference it will not be reflected.

public class JavaTester {
   public static void main(String[] args) {
      IntWrapper a = new IntWrapper(30);
      IntWrapper b = new IntWrapper(45);
      System.out.println("Before swapping, a = " + a.a + " and b = " + b.a);
      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("
**Now, Before and After swapping values will be different here**:");       System.out.println("After swapping, a = " + a.a + " and b is " + b.a);    }    public static void swapFunction(IntWrapper a, IntWrapper b) {       System.out.println("Before swapping(Inside), a = " + a.a + " b = " + b.a);       // Swap n1 with n2       IntWrapper c = new IntWrapper(a.a);       a.a = b.a;       b.a = c.a;       System.out.println("After swapping(Inside), a = " + a.a + " b = " + b.a);    } } class IntWrapper {    public int a;    public IntWrapper(int a){ this.a = a;} }

This will produce the following result −

Output

Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30
**Now, Before and After swapping values will be different here**:
After swapping, a = 45 and b is 30

Updated on: 07-Nov-2023

44K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements