Java Pass By Value and Pass By Reference

CodeNotFound picture CodeNotFound · Nov 19, 2013 · Viewed 35.2k times · Source

i have done the following sample with to check my knowledge

import java.util.Map;

public class HashMap {
    public static Map<String, String> useDifferentMap(Map<String, String> valueMap) {
        valueMap.put("lastName", "yyyy");
        return valueMap;
    }

    public static void main(String[] args) {
        Map<String, String> inputMap = new java.util.HashMap<String, String>();
        inputMap.put("firstName", "xxxx");
        inputMap.put("initial", "S");
        System.out.println("inputMap : 1 " + inputMap);
        System.out.println("changeMe : " + useDifferentMap(inputMap));
        System.out.println("inputMap : 2 " + inputMap);
    }
}

the output is :

original Map : 1 {initial=S, firstName=xxxx}
useDifferentMap : {lastName=yyyy, initial=S, firstName=xxxx}
original Map : 2 {lastName=yyyy, initial=S, firstName=xxxx}

this method useDifferentMap gets the map and changes the value and returns back the same. the modified map will contain the modified value and the scope of it is local for the useDifferentMap method.

my question is if java is pass by value is the modified value should not be affected in the original map.

so is java pass by value or pass by reference ???

thanks

Answer

RainMaker picture RainMaker · Nov 19, 2013

Java always uses the pass-by-value concept to pass the arguments. In the scenario mentioned, the reference to the HashMap itself is passed by value. The valueMap refers to the same object as the inputMap since both of them are referring to the same object.

That's why when you add a key-value pair using valueMap, it is reflected back in inputMap.

Checkout out this simple, yet nicely written answer by Eng.Fouad for a picturized version of the concept. Feel free to read a few more answers in that same question that has more in-depth information.