2012-03-11 49 views

回答

16

你在做什麼是結合類型轉換與一元運算符。

讓我們看看:

首先,你得值-1,你投的類型long

然後,您執行一元運算+,它不會更改該值,因此您仍然有(long) -1

然後,您將其轉換爲int,因此我們現在有int -1。然後,你使用一元運算符-,所以我們有-(-1),這是1。我們有char 1。然後,你使用一元運算符+,所以你仍然有1

最後,將值轉換爲byte,因此您有byte 1。然後它又一次(隱含地)投射到int

5

各種(<type>)部分只是各型間鑄造。那麼,什麼情況是,從右邊,閱讀1 - >-1 - >(long)-1 - >(int)-1 - >-(int)-1 = 1 - >(char)1) - >(byte)1然後把它分配過程中強制轉換爲int。類型轉換不會導致值的有效更改,因此整個第一行相當於int i = 1;

2

這個從右到左。 -1會變長。然後應用+前綴(不起作用),並將其轉換爲int。然後 - 獲得應用(將其更改爲1)並將其轉換爲char。最後,應用了+前綴(仍然沒有效果),並將其轉換爲字節。

0

讓加括號:

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

基本上這只是一系列鑄件和一元運算符(+什麼都不做,-無效)

完整的程序流程是luiscubal的答案