Java 内存管理

(1) Map<String, List<String>>

设一个HashMap对象的结构为<String, List<String>>,用变量map来表示这个HashMap对象。

现取出这个map中的一项键值对,其中键是一个String对象,用变量s表示, 值是一个List对象,用变量list来表示。
当对list进行修改时(list.set(index, value)), 不需要再进行map.put(s, list), map中的这个键值对也会发生相应的变化。

原因: 键值对中的与变量list事实上指向了heap中的同一个List对象,当用变量list来修改List对象中的值时,map中也会发生同样的变化。

在这里插入图片描述

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        list1.add("修改前");
        map.put("1", list);
        // output map
        System.out.println(map);

        list = map.get("1");
        // 修改list对象
        list.set(0, "修改后");
        // output map
        System.out.println(map);
    }
}
{1=[修改前]}
{1=[修改后]}
(2) Map<String, String>

设一个HashMap对象的结构为<String, String>, 用变量map来表示这个HashMap对象。
现取出这个map中的一项键值对,其中键是一个String对象,用变量sk表示, 值也是一个String对象,用变量sv来表示。
当对sv重新赋一个不同的值时,map中的键值对不会发生变化。

原因: 给sv重新赋值,相当于在heap中新创建一个对象,让sv指向这个对象,对map不产生任何影响。
在这里插入图片描述

import java.util.HashMap;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        String sv = "修改前";
        map.put("1", sv);
        // output map
        System.out.println(map);

        sv = map.get("1");
        sv = "修改后";
        // output map
        System.out.print(map);
    }
}
{1=修改前}
{1=修改前}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值