public class Java{
public static void main(String[] args){
final byte x = 1;
final byte y = 2;
byte z = x + y;//ok
System.out.println(z);
byte a = 1;
byte b = 2;
byte c = a + b; //Compiler error
System.out.println(c);
}
}
If the result of an expression involving anything int-sized or smaller is always an int even if the sum of two bytes fit in a byte.
Why does it happen when we add two final bytes that fit in a byte? There is no compiler error.
From the JLS 5.2 Assignment Conversion
In short the value of the expression (which is known at compile time, because it is a constant expression) is representable in the type of the variable that is byte.
Consider your expression
So as summation fits into byte it does not raise an compilation error.
Now if you do