Я понимаю, почему следующее неверно:
byte a = 3;
byte b = 8;
byte c = a + b; // compile error
Он не будет компилироваться. Выражения всегда приводят к int
. Итак, мы должны были сделать явный приведение:
byte c = (byte) (a + b); // valid code
Но Я не понимаю, почему верно следующее:
byte d = 3 + 8; // it valid! why?
Поскольку буквальное целое число (например, 3 или 8) всегда неявно является int
. А выражения int-or-smaller
всегда приводят к int
тоже. Кто-нибудь может объяснить, что здесь происходит?
Единственное, что я могу догадаться, это то, что компилятор приравнивает это выражение к следующему:
byte d = 11;
и не считает это выражением.