because x+y is a compile time constants, since x and y is a compile time constant;
so compiler make sure that x+y dont overflow
here a+b is runtime expression. compiler cant evaluate them at compile time. it may not be fit in to byte .
in java arithmetic operation performed on operands that are below int ranges are resulted as int, normally.