byteshortintlong这几种类型都是java中的整数类型你肯定对int比较了解,byte和int的区别是int是32位,byte是8位,表示的数字范围为:-128到+127所以第一个byte中元素都没超过范围,都以数字显示。第二个byte数组中的元素都是char类型,char类型是占16位的,一般转换为byte是由大到小,需要强制转换,但这些char并没有超出byte的范围,所以不用在打印时会将char元素转换成对应的ascii码,具体你可以去查toString的确是输出字母,但'a'是字符,不是字符串,两个完全不同的概念字符串+primitive类型就是转换为字符型的最简单方法,例:4+""将数字4转换为字符串4现在的4不再是数字,而是字符串,懂?
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时编译器报错