Java前缀自增运算符(++i)结果类型



JLS状态:

如果除移位操作符外的整数操作符至少有一个操作数为long,则该操作符使用64位精度执行,并且该数值操作符的结果为long类型。如果另一个操作数不是long,则首先通过数字提升(§5.6)将其扩展为long类型。

否则,使用32位精度执行该操作,并且该数值运算符的结果类型为int。如果任何一个操作数不是int类型,则首先通过数字提升将其扩展为int类型。

然而当我尝试:

byte b = 18;
print(++b);
static void print(int a) {
System.out.println("Integer : " + a);
}
static void print(byte a) {
System.out.println("Byte : " + a);
}

结果是:

Byte: 19

我期望调用整数类型作为输入参数的方法。

其他整数运算符,如一元加号或一元减号,实际上返回的是整数。

++运算符不改变类型

整型字面量为整型。

byte b = 1;
b = b + 1; // java: incompatible types: possible lossy conversion from int to byte

最新更新