可能重複:
Weird java behavior with casts to primitive typesJava編譯器通過「(byte)+(char) - (int)+(long) - 1」解釋了什麼?
爲什麼這段代碼在Java中,
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
打印1?爲什麼它甚至編譯?
可能重複:
Weird java behavior with casts to primitive typesJava編譯器通過「(byte)+(char) - (int)+(long) - 1」解釋了什麼?
爲什麼這段代碼在Java中,
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
打印1?爲什麼它甚至編譯?
你在做什麼是結合類型轉換與一元運算符。
讓我們看看:
首先,你得值-1
,你投的類型long
。
然後,您執行一元運算+
,它不會更改該值,因此您仍然有(long) -1
。
然後,您將其轉換爲int,因此我們現在有int -1
。然後,你使用一元運算符-
,所以我們有-(-1)
,這是1
。我們有char 1
。然後,你使用一元運算符+
,所以你仍然有1
。
最後,將值轉換爲byte
,因此您有byte 1
。然後它又一次(隱含地)投射到int
。
各種(<type>)
部分只是各型間鑄造。那麼,什麼情況是,從右邊,閱讀1
- >-1
- >(long)-1
- >(int)-1
- >-(int)-1 = 1
- >(char)1)
- >(byte)1
然後把它分配過程中強制轉換爲int
。類型轉換不會導致值的有效更改,因此整個第一行相當於int i = 1;
。
這個從右到左。 -1會變長。然後應用+前綴(不起作用),並將其轉換爲int。然後 - 獲得應用(將其更改爲1)並將其轉換爲char。最後,應用了+前綴(仍然沒有效果),並將其轉換爲字節。
讓加括號:
int i = ((byte) + ((char) - ((int) + ((long) (- 1)))));
System.out.println(i);
基本上這只是一系列鑄件和一元運算符(+
什麼都不做,-
無效)
完整的程序流程是luiscubal的答案
Source for source http://vanillajava.blogspot.com/2011/10/java-plus.html – 2012-03-11 10:05:45