Nie ma operatora + dla byte
. Zamiast tego, oba operandy są promowane na int, więc masz
byte = byte + byte
... becomes (widening to find + operator) ...
byte = int + int
... becomes (result of + operator) ...
byte = int
... co wtedy nie działa, ponieważ nie ma niejawna konwersja z int
do byte
. Trzeba rzucić:
byte a = 1;
byte b = 2;
byte c = (byte) (a + b);
Oto rzeczywiste zasady promocji numerycznej, z section 5.6.2 of the JLS: z czego
Kiedy operator stosuje binarnego promocji numerycznej parę argumentów, każdy musi oznaczać wartość, która może być przekształcana na typ numeryczny, stosuje się następujące reguły, w kolejności, używając konwersji rozszerzającej (§5.1.2) do konwersji argumentów, jeśli to konieczne:
- Jeśli którykolwiek z argumentów jest typu referencyjnego, wykonywana jest konwersja rozpakowywania (§5.1.8). Następnie:
- Jeśli jeden z argumentów jest typu double, drugi jest konwertowany na double.
- W przeciwnym wypadku, jeśli jeden z argumentów jest typu zmiennoprzecinkowego, drugi jest konwertowany na zmienny.
- W przeciwnym wypadku, jeśli jeden z operandów ma typ long, drugi jest konwertowany na long.
- W przeciwnym razie oba operandy zostaną przekonwertowane na typ int.
Możliwy duplikat [Dlaczego nie mogę dodać dwa bajty i uzyskać int i mogę dodać dwa ostatnie bajty, aby uzyskać bajt?] (http://stackoverflow.com/questions/13100019/why-can-not-i-add-two-bytes-and-get-an-int-and-i-can- add-two-final-bytes-get-ab) –