码迷,mamicode.com
首页 > 其他好文 > 详细

byte常见问题

时间:2019-08-06 00:46:23      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:运算   结果   +=   转换   str   logs   进制   告诉   long   

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常见问题

标签:运算   结果   +=   转换   str   logs   进制   告诉   long   

原文地址:https://www.cnblogs.com/shizunatsu/p/11306381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!