Sunday, 19 February 2017

Does Java pass by reference or pass by value?

Hi guys this is a very good topic in java people generally confused on it. Here I am trying to explain how Java is always use pass-by-value.

The Java Spec says that everything in Java is pass-by-value. There is no such thing as "pass-by-reference" in Java.
The key point to understand is when we are passing an object in a method than we are actually passing the address of the object. Actually it’s a copy of bit of that object.
When we pass an Object into a method we are passing the Object reference and not the Object itself.

Java example –

In below example we are passing the primitive variable number than its just passing a copy of bit representation of number that’s why the actual value unchanged in main method.
Code snippet-
/**
 * @author Manoj
 */
public class ReferenceTest {

   public static void main(String[] args) {
       int number =1;
       ReferenceTest referenceTest = new ReferenceTest();
       System.out.println(number); //prints 1
       referenceTest.modify(number);
       System.out.println(number); //prints 1
   }

   private void modify (int number) {
       number = number+1;
       System.out.println(number); // print 2
   }
}

-------------------------------------------------------------------------------------
Similarly in below code we are using a static variable but again the value is unchanged in main method because it’s just passing a copy.
Code snippet-
/**
 * @author Manoj
 */
public class ReferenceTest {
   static int number = 11;
      
   public static void main(String[] args) {
             
       ReferenceTest referenceTest = new ReferenceTest();
       System.out.println(number); //prints 11
       referenceTest.modify(number);
       System.out.println(number); //prints 11
   }

   private void modify (int number) {
       number = number+10;
       System.out.println(number); // print 21
   }
}
---------------------------------------------------------------------------------
In below code we are taking Reference object to elaborate the concept of copy of value.
Code snippet-
/**
 * @author Manoj
 */
public class ReferenceTest {
   Reference reference = new Reference();
   public static void main(String[] args) {
       ReferenceTest referenceTest = new ReferenceTest();
       System.out.println(referenceTest.reference.refNumber); //prints 28
       referenceTest.modify(referenceTest.reference);
       System.out.println(referenceTest.reference.refNumber); //prints 99
   }

   private void modify (Reference reference) {
       reference.refNumber = 99; // here we are updating the actual value
       System.out.println(reference.refNumber); // print 99
       reference = new Reference();
       reference.refNumber = 420;
       System.out.println(reference.refNumber); //420
   }
}

class Reference {
    int refNumber = 28;

}


1 comment: