2014-11-25 50 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