The simplistic answer to this question is that 0x98 is not a byte. Java bytes are signed and range from -128 to +127. 0x98 is greater than +127.
But the real explanation starts with the FACT that Java doesn't have byte literals at all. Every integer literal denotes either an int value or a long value.
So how does this work then?
byte b = 1;
It works because there is a special rule that allows a compile time constant expression whose type is int to be assigned to a byte if and only if the value is in range of byte. So the above works, but:
byte b2 = 0x98; // ERROR
is rejected because 0x98 is outside of the range of byte.
And the same rule applies within array initializers.