2011-10-28 2 views
28

이것은 아마 어딘가에 물어 봤지만 찾을 수 없었습니다. 누군가이 코드가 컴파일되고 왜 1을 인쇄하는지 명확히 할 수 있습니까?기본 유형에 대한 캐스트가있는 이상한 자바 동작

long i = (byte) + (char) - (int) + (long) - 1; 
System.out.println(i); 
+0

여기 무엇이 이상한가요? –

+1

@PrinceJohnWesley : 음, 이상하게 보입니다. 그렇지 않습니까? 대답은 간단하지만 나는 질문을 게시 한 직후 그것을 이해했습니다. –

+1

* 나는 이상하게 보입니다. 나는 누군가가 그것을 보았을 것이고 그것이 합법적 인 자바라고 믿지 않는다고 믿는 어떤 문제도 없다. –

답변

42

그것은이로 분석되고있다 : 모든 +- 연산자 단항 있습니다

long i = (byte)(+(char)(-(int)(+(long)(-1)))); 

+ 또는 -.

이 경우 1은 두 번 무효화되므로 1으로 인쇄됩니다.

5

'+'와 '-'는 모두 unary operators이므로 캐스팅은 해당 유니 코드의 피연산자에서 작동합니다. 나머지는 수학입니다.

5

단항 연산자 및 주조 :

+1 법적

(바이트)입니다 + 1 바이트에 +1을 캐스팅입니다.

교활한! 나를 생각하게했다.

관련 문제