2017-03-13 8 views
-1

나는 OCA 질문에이 질문을 본하고 여기에 90이 아닌 100 를 출력하는 코드입니다 이유를 알 필요했습니다 내가 할 것이, 첫째, 증가 x는 생각, 그래서Java에서 증가하기 전에 프로모션이 발생합니까?

int x = 9; 
long y = x * (long) (++x); 
System.out.println(y); 

(그게 바로 처음에 일어나는 일 이니?) 그런 다음 타입 프로모션을하고 왼쪽 x를 취하고 10을 길어서 두 번 길게 늘릴 것입니다. 권리?

+1

@Guy, 그는 인쇄 한 내용에 왜 인쇄 하는지를 알고 싶어합니다. –

+0

인쇄본을 알고 있지만 그 이유에 대한 답변이 필요합니다. – user218046

+0

캐스트가 오래 걸리는 것이이 시나리오에 기여하는지 잘 모르겠습니다. 'int y = x * (++ x)' – khelwood

답변

9

No. 각 연산자의 피연산자는 왼쪽에서 오른쪽으로 계산됩니다. 따라서 * 연산자의 첫 번째 피연산자 인 x은 두 번째 피연산자 (long) (++x) 앞에 계산됩니다. 따라서 9에 10을 곱합니다.

+0

우선 순위가 평가 순서와 일치하지 않는 경우의 예입니다. +1 –

+0

@Eran, 기본적으로 Java가 작동 중에 변수를 보게되면 값을 가져 와서 작업을 올바르게 작성하려고 시도합니까? 왼쪽에서 오른쪽으로. 승인. 지금은 이해. 감사합니다. – user218046