[英]Assigning to return value of HashMap get
为什么以下代码的最后一行无法在Java中编译?
HashMap<String, Integer> map = new HashMap();
map.put("a", 1);
map.get("a") += 1;
像这样的东西对于C ++来说很好用。
您正在尝试使用get方法更改地图值。 在您的代码中, map.get("a");
只会返回整数。 如果不使用setter方法.put()
则无法更改HashMap对象中存储的Integer的值,这是可以接受的:
map.put("a",1);
map.put("a",map.get("a") + 1);
但是,这:
map.get("a") += 1;
这是不可接受的,也不会编译,因为您无法通过getter方法更改对象的值。
可以在此处找到为什么getter和setter方法(例如map.put()
和map.get()
在Java中如此重要的原因。
像这样的东西对于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);
从map.get
获得的结果是一个Integer
对象。 而且那些Integer
对象不支持+ =运算符(您从C ++知道),因为通常无法在Java中重载运算符。 相反,您必须使用map.put
函数再次将其放入地图中。 请注意, Integer
对象与内置的int
类型不同!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.