在java中,为什么前缀增量或减量运算符在字节的情况下不需要强制转换

在java假设我有以下代码片段

byte b = 127; b=-b ;//(which require a cast due to numeric promotion) b=++b; //does not require cast 

++的JLS规范说:

前缀增量表达式的类型是变量的类型。

….在添加之前,对值1和变量的值执行二进制数字提升(第5.6.2节)。 如果必要,在存储之前, 通过缩小的基元转换(第5.1.3节)和/或经过装箱转换(第5.1.7节) 将总和缩小到变量的类型。 前缀减量表达式的值是存储新值后变量的值。

(术语“缩小基元转换”是指类型转换……)

参考: JLS 15.15.1 。

因此, ++b是一个byte ,不需要显式强制转换。