一个&运算的疑问
来源:5-1 UDP搜索IP与端口-1
PerryMore
2019-03-12
课程中讲到int与byte相互之间的转换时,涉及到了&运算。我有个疑问如下图:
为什么第一个&运算会报错,他们之间的不同是什么?
写回答
1回答
-
这个地方其实要从编译层面来说,我改天给你截图一个编译后的字节码数据给你看i 就明白了。
简单来说:对于第一个的情况,一个'b'&一个变量的情况实则会被转换为int值,这是因为&等运算都会默认转换的原因。
而第二个不会出现这个问题是因为两个都是常量,在编译层面其实就已经可以进行转换了。此时编译器会校验一下:'a'&'b'的结果如果没有超出byte范围,所以就隐式转换了;如果你写:byte b = 'b'|25; 也是可以,但是你写:byte b = 'b'|255; 就不行,因为已经超出范围了。
对于变量,他无法得知变量在过程中是否会被更改值,所以默认认为超出byte范围,所以需要自己显示强转。
112019-03-14
相似问题