에서 (+ =, =, * =, ...는) 다음 코드의 결과에 대해 조금 혼란 스러워요 :혼란 자바
int x = 1;
x -= ((x += 1) << 1);
System.out.println(x);
그것은 -3
를 출력하지만,
| Opearation | Returned | x |
+------------+----------+---+
| int x = 1; | - | 1 |
+------------+----------+---+
| (x += 1) | 2 | 2 |
+------------+----------+---+
| (2 << 1) | 4 | 2 |
+------------+----------+---+
| x -= 4; | - |-2 |
을 나는 여기에 놓치고 무엇 : 내 머리 속에서 계산은 다음과 같이 가야 있기 때문에, -2
를 인쇄 할 것으로 예상거야? 누군가 제발 나에게 무슨 일이 일어나는지 설명해 줄 수 있니?
감사합니다.
가먼저 왼쪽 피연산자가 평가된다 : 왼쪽 피연산자 식은 다음 배열 액세스 식 없으면
잘 정의 된 것으로 가정하면 JLS의 관점에서 대답해야 할 것입니다. 그러나 이처럼 이국적인 표현은 실용적인 목적을 제공하지 못합니다. – HuStmpHrrr