Map中用key取得的value值 然后改 map里面的key对应的value怎么就直接变了呢

map中用key取得的value值 然后改 map里面的key对应的value怎么就直接变了呢 按理说不应该取出来 再添加到集合中嘛

img


下面是两个反例

img

img


感谢各位求解

首先你的CartItem 对象是引用类型,你放入你的Map 只是引用了这个对象,而不是new 的新的对象,所以你对这个对象的操作会对呢你map里的valu影响。

而你举例的反例(代码有些问题,我应该明白你什么意思)
Integer 属于基本数据类型。所以你之后的操作不会影响你放入map 的数据
String 类型由于java有字符串常量池机制,所以你之后修改操作不会对放入map 中的数据产生影响
https://blog.csdn.net/weixin_39724194/article/details/107022401

基础类型会产生副本,非基础类型是引用地址

你的两个反例有问题呀!你把map.get(2) 取出来了,分别赋值给 String 类型的s和Integer 类型的integer;在对其s和integer 的值进行改变,那么这里你就要想想,你改变的值到底是你刚刚创建了一个变量s和integer的值,还是map中key = 2 的值。你之所以会错,是因为你map中key = 2 的值始终没有改变过,你改变的只是你取值返回的s和integer的值。要想改变map中的值只需进行对应key位置进行值覆盖即可。只要键重复,值就会覆盖旧值,保存新值。

Map<Integer,Integer> map = new LinkedHashMap<>();
        map.put(1,5);
        map.put(2,6);
        Integer integer = map.get(2);
        System.out.println("原来的值:"+integer);
        integer = 10 ;
        System.out.println("改变后的值:"+integer);
        //要想改变map中的值,直接覆盖即可
        //键不可重复,但要是重复了会覆盖原有的值
        map.put(2,10);
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }

img