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常见问题的主要内容,如果未能解决你的问题,请参考以下文章