JLS指出,数值提升应用于算术运算符的操作数。
数值提升应用于算术运算符的操作数。数值提升上下文允许使用:身份转换(§5.1.1)、扩大原语转换(§5.1.2)、取消装箱转换(§5.1.8)
然而,在我的经验中,我发现数值提升也适用于其他运算符的操作数,如位运算符。我发现这说
当使用乘法运算符(%,*,/),加法运算符(+,-),比较运算符(<,>,<=,>=),相等运算符(==,!=)和整数位运算符(&,AC.26,^)时,可以发生这些转换。
那我是不是漏掉了什么?
编辑:其他没有列出的操作符呢,比如&、\x、>>、<<、>>>等等?
编辑2:正如@Turing85和@Stephen所指出的,这个问题只适用于JLS 5到11,现在已经解决了。
发布于 2020-08-14 15:28:39
发布于 2020-08-14 14:57:10
二进制数值提升(JLS 5.6.2)适用于“某些二进制运算符”的操作数,该操作数包括按位运算符&、^和\x。引用:
二进制数字提升是对某些运算符的操作数执行的:
至于&&和\,这些都是布尔人的操作符,并且有数字提升。
位移位操作符>>、<<、>>>遵循不同的规则:数值推广分别应用于操作数,表达式的类型完全由左手操作数决定。这意味着以下代码是有效的:
int i =1;
long l = 2;
int j = i << l;https://stackoverflow.com/questions/63415067
复制相似问题