2014-11-25 34 views
0

如果将从Map内提取一个整数值并将其放置到一个新的int变量中并添加一个值,为什么++运算符不能与map.get()一起使用功能?例如,int foo = map.get(key)++;使用++一元运算符与Java中的地图获取功能

为了解决这个问题我用

HashMap<key, Integer> map = new HashMap<key, Integer>(); 

    //Integer values are added in 

    int foo = map.get(key); 
    foo++; 

但我很好奇,为什么在之前的例子是无效参数。根据文档,Map get()函数返回指定键映射到的值;如果此映射不包含键映射,则返回null。

授予返回的值不为空,将返回一个整数,所以不应该在进入foo之前增加整数吗?

+1

即使返回的类型是基本'int',一元渐变操作符也不能与任何方法调用一起使用。 – 2014-11-25 06:42:55

+0

@Vince Emigh您能解释原因吗?我正在寻找一些深入的东西。 – 2014-11-25 07:20:43

回答

1

JLS §15.14.2工作:

后缀表达式后跟一个++操作者是一个后缀增量表达。

PostIncrementExpression: 
    PostfixExpression ++ 

后缀表达式的结果必须是可变 [...]

这清楚地定义了后缀增量表达的语法,并且还清楚地指出后缀表达式必须是一个变量。

因此,您根本无法将运算符++用于方法调用。

+0

正是我在找什么,谢谢。 – 2014-11-25 07:43:32

0

递增/递减运算仅在变量而不是字面数值

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); 
    map.put(1, 1); 

    // These will work 
    int foo = map.get(1); 
    System.out.println(foo); 
    foo++; 
    System.out.println(foo); 

    // This will not work because of the reason mentioned above 
    System.out.println(map.get(1) ++); 
+0

创建一个负数表示'int x = -10;'十是文字,负号是一元运算符,是正确的吗?所以这似乎反驳了你的前提。 – 2014-11-25 07:18:06

+1

'get()'返回一个对象引用,所以这个答案是无稽之谈。 – Kayaman 2014-11-25 07:24:54

+0

我错过了用运算符写增加/减少,现在已经改正了。此外,是的Kayaman,map.get()确实返回值类型的引用,即整数,字符串等。谢谢纠正我 – 2014-11-25 07:45:14