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;为什么是正确的? 类似 += 这种运算符,包含了自动强转在里面。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |