Sabtu, 07 Juni 2014

Does Java pass by value or pass by reference - Interview Question








Does Java is pass by value or pass by reference is one of the tricky Java question mostly asked on fresher level interviews. Before debating
whether Java is pass by value or pass by reference lets first clear what is
pass by value and what is pass by reference. This question has its origin on C
and C++ where you can pass function parameter either value or memory address,
where value is stored (pointer). As per Java specification everything in Java
is pass by value whether its primitive value or objects and it does make sense
because Java doesn't support pointers or pointer arithmetic, Similarly multiple inheritance and operator
overloading
is also not supported in Java. This question becomes confusing
when interviewer ask about how object is passed in Java ? Answer to this
question is simple whenever a method parameter expect object, reference of that
object is passed. Many programmer confuses reference with pointers here which
is not correct, reference is a kind of handle which is used to locate object or
change object, but it doesn’t allows any pointer arithmetic i.e. you can not
increase or decrease memory address and locate a different object
using reference in Java.






Pass by Value and Pass by Reference Example
in Java



Does Java passes parameter by value or pass by referenceLet’s see two example of calling method and passing parameter this will
clear any doubt whether Java is pass by value or pass by reference. consider
following example:









public class
PassByValueExample {

 

    public static void
main(String args[]) {

       int number
= 3;

       printNext(number);

       System.out.println("number Inside main(): "+number);

    }

 

    public static void
printNext(int
number){

        number++;

        System.out.println("number Inside printNext(): "+number);

    }

 

}



Output:

number Inside printNext(): 4

number Inside main(): 3









Above example clearly shows that primitives are passed as pass by value
to method parameters, had Java pass by reference both main
method
and printNext() would have
printed same value. Now look at another example of passing object as method
parameter which will confuse you that Java is pass by reference, which Java is
not.






public class
PassByReferenceConfusion {

 

    public static void
main(String args[]) {

       Car car = new
Car("BMW");

       System.out.println("Brand of Car Inside main() before: "+ car.brand);

       printBrand(car);

       System.out.println("Brand of Car Inside main()after: "+ car.brand);

    }

 

    public static void
printBrand(Car car){

        car.brand = "Maruti";

        System.out.println("Brand of Car Inside printBrand(): "+car.brand);

    }

 

    private static class
Car{

        private String
brand;

     

        public Car(String brand){

            this.brand = brand;

        }



    }

}



Output:

Brand of Car Inside main() before: BMW

Brand of Car Inside printBrand(): Maruti

Brand of Car Inside main()after: Maruti






If you see change made in method parameter is reflected globally
i.e. brand of car is changed in all places it means one object is used in both
method. Well in reality if you pass object as method parameter in Java  it passes "
value of reference" or in
simple term object reference or handle to Object
in Java
. Here
reference term is entirely different than
reference term used in C and C+ which directly points to memory address of
variable and subject to pointer arithmetic. in Java object can only be
accessed by its reference as you can not get memory address where object is
stored or more precisely there is no method to get value of object by passing memory
address.





To conclude everything in Java including primitive and objects are pass
by value. In case of object value of reference is passed.





Other Java Interview articles you may like





























Source:http://javarevisited.blogspot.com/2012/12/does-java-pass-by-value-or-pass-by-reference.html

Tidak ada komentar:

Posting Komentar