【发布时间】:2015-12-01 17:32:03
【问题描述】:
为什么下面最后一行代码在 Java 中不能编译?
HashMap<String, Integer> map = new HashMap();
map.put("a", 1);
map.get("a") += 1;
类似的东西适用于 C++。
【问题讨论】:
标签: java reference hashmap variable-assignment
为什么下面最后一行代码在 Java 中不能编译?
HashMap<String, Integer> map = new HashMap();
map.put("a", 1);
map.get("a") += 1;
类似的东西适用于 C++。
【问题讨论】:
标签: java reference hashmap variable-assignment
您正在尝试使用 get 方法更改地图值。在您的代码中,map.get("a"); 只会 RETURN 一个整数。如果不使用 setter 方法.put(),则无法更改存储在 HashMap 对象中的 Integer 的值
这样的事情是可以接受的:
map.put("a",1);
map.put("a",map.get("a") + 1);
但是,这个:
map.get("a") += 1;
不可接受且不会编译,因为您无法通过 getter 方法更改对象的值。
map.put() 和map.get() 等getter 和setter 方法在Java 中如此重要的原因可以在here 中找到
【讨论】:
map.get() 返回一个不可变的Integer。
从map.get 得到的结果是一个Integer 对象。而那些 Integer 对象不支持 += 运算符(正如您从 C++ 中所知道的那样),因为您通常不能在 Java 中重载运算符。
相反,您必须使用 map.put 函数再次将其放入地图中。
请注意,Integer 对象与内置的 int 类型不同!
【讨论】:
类似的东西适用于 C++。
Java 不是 C++,所以你不应该期望在 C++ 中有效的东西在 Java 中同样有效。
如果要更新存储在地图中某个键下的值,则必须使用新值再次将其放入地图中,这将替换旧值。例如:
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
// Get the value stored under "a", add one and store the new value
map.put("a", map.get("a") + 1);
【讨论】: