为什么我得到类型不匹配:无法从 int 转换为字节

Why i am getting type mismatch: cannot convert from int to byte

提问人:PSR 提问时间:5/19/2013 最后编辑:PSR 更新时间:11/30/2015 访问量:3715

问:

class Test
{  
   public static void main(String[] args) 
   { 
     byte t1 = 111;
     byte t2 =11;
     byte t3 = t1+t2;

     System.out.println(t1+t2);   

   }  
}  

在eclipse中,它显示错误。这里总和是 122,范围在字节范围内。那么为什么我在这里收到这个错误。cannot convert from int to byte

提前致谢...

Java 字节

评论

1赞 Chris 5/19/2013
加法结果为 。你必须明确地把它贬低int
0赞 PSR 5/19/2013
122 在字节范围内吗?
0赞 Chris 5/19/2013
122 在字节范围内。但是,您看到的结果 (122) 位于 。所以它需要下沉int
0赞 SJuan76 5/19/2013
一个字节可以容纳 256 个值。对于无符号字节,它从 0 到 255,对于有符号字节,它从 -128 到 127。

答:

0赞 Juvanis 5/19/2013 #1
byte t3 = t1 + t2;

对于上面的语句,编译器输入实际值并尝试计算它:

字节 t3 = 111 + 11;

但是,这些数字是整数文字,这就是编译器抱怨的原因。您必须进行显式强制转换:

byte t3 = (byte) (t1 + t2);

评论

1赞 Stephen C 5/19/2013
实际上,这种解释是不正确的。 并且不是整数文字。它们是变量。真正的解释是,算术运算符的积分操作数被提升为(至少)。请参阅 stackoverflow.com/questions/16633949/...t1t2byteint
5赞 Alpesh Gediya 5/19/2013 #2

当你对字节进行数学运算时,Java 会将 Widening(自动类型提升)扩大到 byte(隐式向上转换)以使这种情况整数。所以当你执行

 byte t3 = t1+t2; //  t1+t2; will be evaluated as integer.

由于 t1+t2 结果比字节宽,因此您需要将其下沉为字节。

删除编译错误。

 byte t3 = (byte) (t1+t2); // typecast to byte

有关更多信息,请阅读 JLS 5.1.2