例如:
byte a = 0x01; // Works fine
byte b = foo() ? 0x01 : 0x02; // Get error "Cannot impicitly convert int to byte"
为什么会这样?
答案 0 :(得分:2)
当为类型为byte
的变量分配数字文字(无论是十六进制还是十进制)时,编译器会检查该值是否适合byte
。一旦编译器知道该值适合,它就会将文字视为类型为byte
的文本,与变量的类型相匹配。
但是,当您使用三元表达式时,编译器不再确定表达式的值是什么。默认情况下,它将条件表达式中的值视为整数文字,因为没有类型转换。因此,编译器看到的是将非常量int
表达式赋值给类型为byte
的变量。这会触发您看到的错误。