Hi, I think it has to do with compiling rules. When an int is declared final, its value is set forever at compile time. The compiler knows for sure that 100 is within the range of byte value. On the other hand, without declaring an int final, the compiler will have no way of knowing for certain that the int's value will be within byte's range. Therefore, without the final keyword, compiler requires the int to be cast to byte.