【发布时间】:2012-02-20 18:22:18
【问题描述】:
谁能解释一下java字节类型?
这不能编译:
byte b1 = 9;
byte b2 = 1;
byte b3 = b1 + b2;
虽然这样做:
byte b4 = 9 + 1;
byte b5 = (char)(9+1);
此外,分配给 long 不起作用,即使值适合一个字节:
byte b7 = (long)127;
包装器会变得更奇怪
这样编译:
Byte b6 = (int)3;
但这不是:
Integer i = (byte)3;
【问题讨论】:
-
如果没有投诉的错误信息和行号,这很难回答。
-
另外,
byte x = 126 + 1;有效,但byte y = 126 + 2;无效,不知何故,当使用可计算值时,编译器会检查容器是否足够宽。但是,在 JLS 中找不到参考。 -
在这个问题的答案中详细讨论了这一点:link
-
JLS 5.2:赋值转换
-
是的,因为 JLS 5.2 说,缩小对话只针对 byte、short、char 和 int 进行。 Long 在这方面很特别。
标签: java