2013-02-10 3 views
4

, 나는컴파일러가 "증가 값 (bar ++)의 값이 사용됩니다"라는 경고 - 동작이 변경되었음을 의미합니까? 내가 다음 코드 조각을 컴파일 할 때

int foo = 1, bar = 2; 
return foo + bar++; // foo and bar are ints 

은 그래서 4보다는 3 것 반환 된 값을 의미한다 "증가 값 (막대 ++)의 값이 사용된다"라는 컴파일러에서 경고를 받았습니다 예상했기 때문에 놀랍습니다. 3

모든 자바 컴파일러에 보편적입니까? 아니면 뭔가 다른 일을하고있는 NetBeans를 사용하고있는 것일까 요?

감사

+3

범용 : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – alfasin

+0

아니요 결과는 3이됩니다. 경고를 잘못 읽은 것 같습니다 (실제로는 경고가 없습니다. javac로 컴파일). – nhahtdh

+2

당신은 그것이 무엇을 반환 할 것인지 묻고 있습니다. 왜 안 ** ** 그것을 시도? 그것은 3을 반환 할 것입니다. 나는 일식이 당신에게 그것이 사용되지 않은 * 미사용 *이라고 말하고 있다고 의심합니다. –

답변

0

1) 모든 Java 컴파일러는 코드에 대해 동일한 바이트 코드를 생성하므로 결과는 3입니다. 테스트 만하면됩니다.

2) 경고의 의미는 return foo + bar++; return foo + bar과 동일합니다.

4

코드의 조각은 "increment bar"다음 "return foo + bar"을 말한다합니다. 따라서 "foo + bar"이 3이면 막대가 증가하지만 기능이 이미 반환되어 쓸모가 없습니다.

variable++는이 표현에 사용되는 끝났다 후 변수를 증가 ", 의미, 사후 증가를위한 것입니다.

당신이이 ++variable를 선행 증가 연산자를 사용하여, 사용하기 전에 변수가 증가합니다

.

(일부 언어들은 더 많은 표현을 복잡하게 처리하는 방법에 약간의 모호성을 가지고 있지만) 지금까지 내가 아는 한, 사전/사후 증가 연산자를 구현하는 모든 언어가이 방법을한다.

% cat Test.java 
public class Test { 
    public static void main(String[] args) { 
    System.out.println("The result is: " + runTest() + "\n"); 
    } 
    public static int runTest() { 
    int foo = 1, bar = 2; 
    return foo + bar++; 
    } 
} 
% javac Test.java 
% java Test 
The result is: 3 
+1

나는 내 질문에 대해 오해했다고 생각합니다! 코드가 무엇을해야하는지 알고 있습니다. 다시 말하면'3' (foo + bar를 반환하고 bar를 증가)을 반환 하겠지만, 코드를 실행할 때 그걸 보지 않을 것입니다. – user1508893

+0

그것은'3'을 반환합니다. –

+0

그것이 당신이보고있는 것과 다르다면, 당신은 무엇을보고 있습니까? 테스트 프로그램을 실행 해 봅니다. –