byte类型使用1字节存储,表示范围-128~127,int使用4字节存储,当byte+int时会将结果类型转为int,因为int表示范围大于byte,不影响精度,所以结果为197,但是当(byte)(a+b)时,是将计算结果int转为byte,存储空间也有4字节变为1字节,即是保留8个bit,把他们全部转换成2进制=11000110(198刚好8位),此时当前计算机保存这8个位,但是,计算机中表示数最高位会被识别为符号位,即0为正号,1位负号,不参与运算,因此当前2进制数被识别为负数,然而在计算机中负数使用补码方式进行表示,计算实际值需要将其转换成原码方式,转换方式:去除符号位剩余位按位取反(10111001),最低位+1(10111010),得出的值在计算大小(最高位依然表示正负),最终得出-58
如果想要搞清楚,请在<计算机组成原理>中查询"数据在机器层次的表示方法"来获取更详细的信息
Java中byte范围是-128 ~ +127,而不是0 ~ 255