繁体   English   中英

分配给HashMap的返回值get

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM