2014-11-25 6 views
0

지도에서 정수 값을 추출하여 새로운 정수 변수에 추가하면 어떤 이유에서 ++ 연산자가 map.get()과 작동하지 않습니다 기능? 예를 들어,++의 단항 연산자를 사용하여 Java에서지도 가져 오기

int foo = map.get(key)++;이 해결하기 위해 나는

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

    //Integer values are added in 

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

을 사용하지만 이전의 예 잘못된 인수입니다 이유에 대해 궁금합니다. 문서에 따라 get() 함수는 지정된 키가 매핑되는 값을 반환하거나이 맵에 키 매핑이없는 경우 null을 반환합니다.

반환 된 값이 null이 아니라면 Integer가 반환되므로 Integer가 foo에 들어가기 전에 증분 ​​할 수 없습니까?

+1

단항 증가 연산자는 ANY 메소드 호출에서 작동하지 않습니다. 반환되는 유형이 원시 int 인 경우에도 –

+0

@Vince Emigh 이유를 설명 할 수 있습니까? 나는 좀 더 깊이있는 것을 찾고있다. –

답변

1

찾는 JLS §15.14.2 리터럴 수치 작동 :

++ 연산자 다음 후위 식 후위 증가이며 표현.

PostIncrementExpression: 
    PostfixExpression ++ 

는 가변가 [...]이 명확 명확 또한 후위 증가 표현 구문을 정의하고,

그 상태이어야 후위 식의 결과 후위 표현식은 변수 여야합니다.

따라서 연산자 ++을 메서드 호출에 사용할 수 없습니다.

+0

정확히 내가 뭘 찾고 있었는지, 고마워. –

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;'ten은 리터럴이고 음수 기호는 단항 연산자입니다. 맞습니까? 그래서 이것은 당신의 전제를 반증하는 것 같습니다. –

+1

'get()'은 객체 참조를 반환하므로이 대답은 의미가 없습니다. – Kayaman

+0

연산자를 사용하여 증가/감소를 기록하지 못했습니다. 지금 수정했습니다. 또한 예, Kayaman, map.get()은 정수 유형의 참조 즉, 정수, 문자열 등을 반환합니다. 수정을위한 감사합니다. –