Integer类型变量作为Map集合的value,对变量自增,会发生什么?

文章探讨了Map中value存储引用而非值的问题,指出Integer类型加法时虽然外部引用改变,但Map中的引用保持不变,因为Integer对象的值不可变。作者通过DEBUG过程详细解释了这个现象。
摘要由CSDN通过智能技术生成

一、代码

二、疑问

        都知道Map的value存储的是引用地址,原以为pageNum++后,那么原来value引用地址指向的数据应该变成(1+1=2)了。map.get("pageNum")的值应该变成2。但结果却输出了1。

三、解析

       本质:map集合中存储了pageNum的引用,在外部对pageNum++,pageNum引用发生变化,但map中的引用仍然是之前的。

        具体解释:pageNum是Integer类型的,Integer类型在进行++操作时,会自动进行拆箱、自增、装箱操作(拆箱:将包装类转换为基础数据类型;装箱:将基础数据类型转换为包装类型)。

Integer的内部属性 private final int value,被final修饰不可变。

        对pageNum进行赋值操作时,如pageNum++或pageNum=3,会调用Integer类中的valueOf方法进行装箱,会返回一个缓存对象或者new一个新的对象。此时pageNum的引用地址已经发生了改变。而之前存在map中的value还是指向原来的引用地址。因此,最后map,get(""pageNum")还是输出原来的值。

四、DEBUG过程

1、将pageNum存入map后

2、pageNum++后,pageNum引用地址改变,map中地址未发生变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值