byte常见问题

Posted shizunatsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了byte常见问题相关的知识,希望对你有一定的参考价值。

1.byte取值为什么是-128~127?

https://www.cnblogs.com/shizunatsu/p/10617346.html

 

2.如何理解Java中默认的整数类型是int类型?byte b = 1如何理解?

字面值常量如100,200等在Java中默认都是int类型。

1也是int类型,而把1赋给byte类型时,编译器会自动将整型的1转换为byte类型

 

对于byte、short、int,编译器都可以自动识别并转换。

 

12345678987默认也是int类型,但它超出了int的取值范围,所以long i = 12345678987会报错。

正确写法: long i = 12345678987L;  //告诉编译器这是一个Long型数据

 

3.byte a=1;byte b=2;byte c=a+b;最后一句报错,为什么?

因为a与b都是变量,变量相加的结果在编译期间无法得知,不知道是否会超过byte的取值范围,所以编译器会报错。

 

4.byte a = 1+2;//正确

   byte b = 127+1;//错误,为什么?

编译器具有常量优化机制,在编译期间能够知道1+2=3,127+1=128。

128超出了byte的取值范围,所以报错。

 

5.byte b = (byte)128;输出b的值为什么是-128?

128是int类型,二进制为 0000 0000 0000 0000 0000 0000 1111 1111

强转为byte类型时,变为 1000 0000 ,最高位是符号位,减一为0111 1111,再按位取反为 1000 0000,转换为十进制是128,加上符号位为-128。

 

计算方式可以按照,byte的取值是-128~127,想象成一个时钟,128就是127+1,127往前走一格就是-128.

 

6.byte b=1;b = b+1;//错误 ,为什么?

因为b是个变量,变量与常量相加的结果编译器无法预知,不知道它是否会超出byte的取值范围,所以编译器会报错。

 

7.byte b=1;b += 1;为什么是正确的?

类似 += 这种运算符,包含了自动强转在里面。

以上是关于byte常见问题的主要内容,如果未能解决你的问题,请参考以下文章

JAVA服务器接收byte数组的问题

java中的byte问题

请教大家,关于byte类型的运算问题

java Object和byte数组互相转换中遇到的问题

汇编中byte,word,dword的问题

Java中基本数据类型byte的溢出问题