switch only evaluates primitive int
I don't have the K & B book (wish I'd bought it!), but I think it means that the valid parameter types for a switch statement must be int or anything that is a widening conversion to an int. So, no booleans or floating points are allowed.
This is a bit of a tricky question in that the compiler compares the max value of the switch type with the argument for each case statement. Here, the max value of a byte is 127, so the compiler complains about 128.