Java Isn';整数不是引用吗?inc为什么不更新hashmap值?
我希望以下代码片段是等效的:Java Isn';整数不是引用吗?inc为什么不更新hashmap值?,java,reference,hashmap,Java,Reference,Hashmap,我希望以下代码片段是等效的: Integer count = occurences.get(c); if(count == null) { count = 0; occurences.put(c, count); } ++count; 及 但是,当我运行程序时,第一个代码段的计数始终为0。 为什么呢?既然Integer是HashMap中的一个引用,为什么增量没有反映出来,我需要做一个put?count是一个局部变量。它指向一个不可变类的实例,Integer
Integer count = occurences.get(c);
if(count == null) {
count = 0;
occurences.put(c, count);
}
++count;
及
但是,当我运行程序时,第一个代码段的计数始终为0。
为什么呢?既然Integer
是HashMap
中的一个引用,为什么增量没有反映出来,我需要做一个put
?count
是一个局部变量。它指向一个不可变类的实例,Integer
当您使用以下命令将其递增时:
++count;
这只是语法糖:
count = Integer.valueOf(count.intValue() + 1);
您正在重新分配计数
。仅此而已。count
是一个局部变量。它指向一个不可变类的实例,Integer
当您使用以下命令将其递增时:
++count;
这只是语法糖:
count = Integer.valueOf(count.intValue() + 1);
您正在重新分配计数
。仅此而已。因为它不是对元素的引用。@AndyTurner:我不明白,因为它不是对元素的引用。@AndyTurner:我不明白,为什么它是局部变量?我们把它保存在hasmap中。那么,我的代码适用于哪种类型的对象?@Jim您不在哈希映射中存储变量:您将变量指向的值存储在哈希映射中(或者不存储:您可以将未分配给变量的值放入映射中)。对变量的后续更新不会反映在映射中,但所有变量都是引用。那么,我是在把实际内容放进去吗?那么,我们如何通过将引用保存在我们经常阅读的hashmap中来获得所有这些内存泄漏呢?在我的回答的第一行中,我说:“它指向[引用]一个不可变类的实例,Integer
”。它不是指与地图相关的任何内容。这只是一个数字。你不能改变那个数字;您所能做的就是使引用引用引用一个不同的数字。这与Integer
的不变性关系不大,更多的是++count
被定义(或多或少)为count=(Integer)((int)count+1)
。为什么它是一个局部变量?我们把它保存在hasmap中。那么,我的代码适用于哪种类型的对象?@Jim您不在哈希映射中存储变量:您将变量指向的值存储在哈希映射中(或者不存储:您可以将未分配给变量的值放入映射中)。对变量的后续更新不会反映在映射中,但所有变量都是引用。那么,我是在把实际内容放进去吗?那么,我们如何通过将引用保存在我们经常阅读的hashmap中来获得所有这些内存泄漏呢?在我的回答的第一行中,我说:“它指向[引用]一个不可变类的实例,Integer
”。它不是指与地图相关的任何内容。这只是一个数字。你不能改变那个数字;您所能做的就是使引用引用引用一个不同的数字。这与Integer
的不变性关系不大,更多的是++count
被定义为count=(Integer)((int)count+1)
。