Pages

Tuesday, July 5, 2016

Does Java pass by reference or pass by value?


Hi All, Once upon a time I was in front of an interview panel. Interview panel consist with two guys and one of them asked “Does Java pass by reference or pass by value”, from that day onwards it becomes a nightmare for me. Today I am gonna get ride from it.

I search for an answer here and there, I’m really tired of searching ….I found some articles which says “primitives are passed by value, objects are passed by reference”; this statement is partially incorrect. There is no doubt in “primitives are pass by value”. Problem arise when we start to think about object passing.

Before going in-depth of this discussion, let’s separately discuss the meanings of pass-by-value and pass-by-reference meanings. Below I mention the best description I found on it from Scott Stanchfield’s article.

Pass-by-value


The actual parameter (or argument expression) is fully evaluated and the resulting value is copied into a location being used to hold the formal parameter's value during method/function execution. That location is typically a chunk of memory on the runtime stack for the application (which is how Java handles it), but other languages could choose parameter storage differently.

Pass-by-reference


The formal parameter merely acts as an alias for the actual parameter. Anytime the method/function uses the formal parameter (for reading or writing), it is actually using the actual parameter.

Now the time to clear our mess Objects are passed by reference A correct way of expressing that in java is “Object references are passed by value”
Here I’d like to share simple and popular example to have better understanding about the above context





Let’s add something more.
When you pass aDog to the foo() method, Java passes the references by value just like any other parameter. This means the references passed to the method are actually copies of the original references. Below figure shows two references pointing to the same object after Java passes an object to a method.




Java copies and passes there reference by value, not the object. Thus, method manipulation will alter the objects, since the references point to the original objects.

Our final conclusion is everything in java is primitives are passed by value, objects




I’d like to share the references that I have used while writing this document