2011-10-28 51 views
28

這可能是問某處,但我找不到它。有人可以澄清爲什麼此代碼編譯並打印出1奇怪的java行爲與強制轉換爲原始類型

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

這裏有什麼奇怪的東西? –

+1

@PrinceJohnWesley:好吧,它看起來很奇怪,不是嗎?儘管答案很簡單,並且我在發佈問題後立即明白了。 –

+1

*我認爲它看起來很奇怪;我沒有任何問題認爲有人會看這個,不相信它甚至是合法的Java。 –

回答

42

它被解析爲這樣:

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

,所有的+-運營商是一元+-

在這種情況下,1被否定兩次,所以它打印爲1

5

因爲'+'和' - '都是unary operators,並且演員們正在操作這些單目操作符。其餘的是數學。

5

一元運算符和鑄造:)

1是合法的

(字節)+ 1鑄造1爲一個字節。

偷偷摸摸!讓我想到。