一个&运算的疑问

来源:5-1 UDP搜索IP与端口-1

PerryMore

2019-03-12

课程中讲到int与byte相互之间的转换时,涉及到了&运算。我有个疑问如下图:

图片描述

为什么第一个&运算会报错,他们之间的不同是什么?

写回答

1回答

Qiujuer

2019-03-13

这个地方其实要从编译层面来说,我改天给你截图一个编译后的字节码数据给你看i 就明白了。

简单来说:对于第一个的情况,一个'b'&一个变量的情况实则会被转换为int值,这是因为&等运算都会默认转换的原因。


而第二个不会出现这个问题是因为两个都是常量,在编译层面其实就已经可以进行转换了。此时编译器会校验一下:'a'&'b'的结果如果没有超出byte范围,所以就隐式转换了;如果你写:byte b = 'b'|25; 也是可以,但是你写:byte b = 'b'|255; 就不行,因为已经超出范围了。


对于变量,他无法得知变量在过程中是否会被更改值,所以默认认为超出byte范围,所以需要自己显示强转。

1
1
PerryMore
非常感谢!
2019-03-14
共1条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2316 学习 · 476 问题

查看课程