Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Isn';整数不是引用吗?inc为什么不更新hashmap值?_Java_Reference_Hashmap - Fatal编程技术网

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)