一、代码
二、疑问
都知道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中地址未发生变化