2016-08-21 5 views
0
x=10; 
y = --x + x++; 
System.out.println(y); 
// prints 18  

링크 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html에 따르면 접미사 증가 (x ++)는 접두사 증가/감소 (-x)보다 우선 순위가 높습니다.자바 연산자 우선 순위 y = - x + x ++;

그러므로 x++ (값 10)은 --x (값 11-1 = 10)보다 먼저 실행해야합니다. 그래서 y=20. 그러나 'y'는 어떻게 18이됩니까?

+2

아래 참조 명확히로

그래서, 18, 정확 또한 http://stackoverflow.com/questions/2371118/how-do-the-post -increment-i-and-pre-increment-i-operators-in-java – Tunaki

+1

그 튜토리얼에서 더 높은 우선 순위가 의미하는 바를 모르겠습니다. 그것은 여기서 확실히 관련이 없습니다. '+'의 피연산자는 왼쪽에서 오른쪽으로 평가되므로'- x'는'x ++'보다 먼저 평가됩니다. @ Tunaki의 링크는보다 자세한 정보를 제공합니다. –

+0

처음에 흥미가 있었던 것은'++ a'가'++ a'가 값을 반환하기 때문에 올바르지 않으므로'++ a' 전에'++ '를 사용하는 것이 무엇 이었는가하는 점이었습니다. '(++ a) ++'또는'++ (a ++)'로 컴파일 될지 어떨지에 관계없이 예외를 발생시킵니다. 하지만 실수가 아니라면'a +++ b '의 경우에 유용하게 쓰이며'a + (++ b)'가 아니라'(a ++) + b'라고 판단합니다. – Pshemo

답변

3

this link

연관성 및 우선하는 순서 자바 표현식에 연산자를 적용하지만이있는 하위 표현식이 평가되는 순서를 결정하지 않는 결정에 설명되어있다. Java에서 하위 표현식은 왼쪽에서 오른쪽으로 평가됩니다 (선택 사항이있을 때). 예를 들어 A() + B() * C(D(), E())이라는 표현식에서 서브 표현식은 A(), B(), D(), E()C() 순으로 평가됩니다. C()이 D()와 E() 둘 다 왼쪽에 나타나지만 C()을 평가하려면 D()E()의 결과가 필요합니다. 이 동작에 의존하는 코드를 작성하는 것은 좋지 않은 스타일로 간주됩니다 (다른 프로그래밍 언어는 다른 규칙을 사용할 수도 있음).

--x 

실행하고 두 개의 하위 표현의 합과 전체 표현식은 왼쪽에서 오른쪽으로 평가로

x++ 

보다 평가 전 왜

이 설명합니다. 첫 번째 것은 보다 먼저 실행됩니다 (예 : 수정본 ++이 일반적으로 더 우선 순위를 갖지만, 여기에 포함 된 하위 표현식은 첫 번째 표현식 이후에 평가됩니다). 당신이 9 x에 두 번 합산대로

x=10; 
y = --x + x++; 
// y = (10-1) /* now x==9 */ + (9); /* after this x == 10 */ 
// y = (9) + (9); /* and now x == 10 */ 
// y == 18 and x == 10 
+0

@Pshemo, 내 대답 – ddb

+0

@ maanick90 업데이트, 내 대답 업데이트 – ddb