Java:简述Java-byte类型的运算

Java:简述Java-byte类型的运算


提示:Java中的基础类型byte 是 1 个字节,也就是 8 位,去掉最高位为符号位,其他可取值为 -128~127。(1000 0000为-128;0000 0000为0)

1-提问:说说下面程序片段的输出结果及原因?

byte n1 = 10 + 117;
byte n2 = 10 + 118;
System.out.println(n1);
System.out.println(n2);
		
byte n3 = -10 - 118;
byte n4 = -10 - 119;
System.out.println(n3);
System.out.println(n4);

1-回答:上面程序段 n1 输出为 127,n2 编译报错不兼容的类型(从 int 转换到 byte 可能会有损失);n3 输出为 -128,n4 编译报错不兼容的类型(从 int 转换到 byte 可能会有损失)

1-解释:因为这里的 10 和 117 属于字面量,经过 javac 编译优化后变成了 byte n = 127,而 n 的类型是 byte,编译后等号右侧的 127 默认类型是 int,所以会造成数据类型不匹配,而这时候 javac 会判断 127 是否位于 byte 类型的取值范围(-128~127)之内,若在范围之内则会将 127 的类型转换为 byte,否则报错。


2-提问:说说下面程序片段的输出结果及原因?

byte n1 = 10;

byte n2 = n1 + 117;
System.out.println(n2);

byte n3 = (byte) 128;
System.out.println(n3);

byte n4 = (byte) (n1 + 117);
System.out.println(n4);
		
byte n5 = (byte) (n1 + 118);
System.out.println(n5);

2-回答:上面程序段 n2 定义语句编译会报错不兼容的类型,n3 输出为 -128,n4 输出为 127,n5 输出为 -128。

2-解释:对于 n2 表达式来说,等号右边不是常量,所以编译时无法确定其值是否位于 bye 的取值范围,所以会直接报错,如果把 n1 前面加 final 则 n2 就能正确输出 127 了。

对于 n3,n4,n5 表达式来说,由于明确指定了类型强转,所以明确说明了自己知道有可能会有损失,所以就能成功输出,由于 10 + 117 刚好在 byte 范围之内,所以n4输出 127 没问题。但是128 在 byte 范围之外,所以会造成损失,n3,n5输出-128。

对于int和byte之间是如何转换的,详情请看https://blog.csdn.net/qq_29229567/article/details/87091619

参考:https://mp.weixin.qq.com/s/qZO3Z4aPBtJ21-WVCEgz3Q

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页