JAVA中默认的数值类型是int.那为什么byte a=10可以赋值?
10默认为int,在二进制(内存)中表示为:00000000 00000000 00000000
00001010;
10占用4字节,而byte只有1字节,按理来说是不能赋值的;
在赋值时,编译器进行检查(注:编译器仅检查语滑尘卖法错误,所以byte a
= 10;编写正确,编译通过),发现二进制的有效位数值位于byte范围内(即进行了自动类型转换,现在是00001010),去除前三个字节
10在内存中为:
00000000 00000000 00000000 00001010 4字节
byte只有
00000000 兄衫 信逗 1字节
但10的有效位只有1字节,所以除去无效位,即:
000000001010
反之:以此例为例,若前三位包含有效位数字
byte a = 1000
转为二进制为:00000000 00000000 00000011 11101000
前三位包含有效数字,不能进行自动转换,因此出现语法错误,编译器报错
或:按照简化理解
byte范围为-128~127之间,a = 10,10没超过byte范围,当然赋值没问题
试验表明我这种理解也成立,赋值为-128时无错误,赋值为-129时编译器报错