2015-07-10 90 views
4

衆所周知的事實:(byte)1^(byte)1導致int(根據規範)。java中的類型轉換規則

有人可以向我解釋爲什麼以下可能沒有明確演員(從intbyte)? byte myByte = (byte)1^(byte)1

以下,在另一方面,是不允許的:

int i = 0; byte b = i;

回答

9

此:

(byte)1^(byte)1 

是一個常量表達式(JLS 15.28),這是衆所周知的是在範圍爲byte。可以隱式地因此將其轉換爲byte在分配上下文(JLS 5.2):

此外,如果表達式爲byte類型,shortchar的恆定表達(§15.28),或int

  • 如果變量的類型爲byteshortchar,則可以使用縮小基元轉換,並且常量表達式的值可以表示變量的類型。

如果不是一個常量表達式(例如,如果這些值中的一個是一個變量而不是),則分配會失敗。

+0

我明白了。瞭解。謝謝 –