Java Pass By Value和Pass By Reference

SAR*_*SAR 9 java hashmap pass-by-reference pass-by-value

我已经做了以下示例来检查我的知识

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

original Map : 1 {initial=S, firstName=xxxx}
useDifferentMap : {lastName=yyyy, initial=S, firstName=xxxx}
original Map : 2 {lastName=yyyy, initial=S, firstName=xxxx}
Run Code Online (Sandbox Code Playgroud)

此方法useDifferentMap获取地图并更改值并返回相同的值.修改后的地图将包含修改后的值,其范围为useDifferentMap方法的本地范围.

我的问题是,如果java是通过值传递,修改后的值不应该在原始地图中受到影响.

所以java传递值或通过引用传递???

谢谢

Sud*_*hul 14

Java始终只是按值传递,只是在这种情况下,HashMap的引用是按值传递的.的valueMap是指相同的对象inputMap.

这就是为什么当你使用时添加一个键值对valueMap,它会被反射回来inputMap,因为它们都指的是同一个HashMap对象.

此答案由Eng.Fouad解释这个概念非常漂亮.


Sur*_*tta 5

Java是按值传递的。 但是您的疑问在于是否引用了引用,即Java中的引用是否按值传递。

因此,通过了参考值,地图生效了。

您对“按价值传递”一词感到困惑。按值传递按意义传递的值。