이것은 아마 어딘가에 물어 봤지만 찾을 수 없었습니다. 누군가이 코드가 컴파일되고 왜 1
을 인쇄하는지 명확히 할 수 있습니까?기본 유형에 대한 캐스트가있는 이상한 자바 동작
long i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
이것은 아마 어딘가에 물어 봤지만 찾을 수 없었습니다. 누군가이 코드가 컴파일되고 왜 1
을 인쇄하는지 명확히 할 수 있습니까?기본 유형에 대한 캐스트가있는 이상한 자바 동작
long i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
그것은이로 분석되고있다 : 모든 +
및 -
연산자 단항 있습니다
long i = (byte)(+(char)(-(int)(+(long)(-1))));
+
또는 -
.
이 경우 1
은 두 번 무효화되므로 1
으로 인쇄됩니다.
'+'와 '-'는 모두 unary operators이므로 캐스팅은 해당 유니 코드의 피연산자에서 작동합니다. 나머지는 수학입니다.
단항 연산자 및 주조 :
+1 법적
(바이트)입니다 + 1 바이트에 +1을 캐스팅입니다.
교활한! 나를 생각하게했다.
여기 무엇이 이상한가요? –
@PrinceJohnWesley : 음, 이상하게 보입니다. 그렇지 않습니까? 대답은 간단하지만 나는 질문을 게시 한 직후 그것을 이해했습니다. –
* 나는 이상하게 보입니다. 나는 누군가가 그것을 보았을 것이고 그것이 합법적 인 자바라고 믿지 않는다고 믿는 어떤 문제도 없다. –