我是Java新手。所以我无法理解这个例外发生的原因。这里是我的代码:为什么这段代码抛出错误?
class St
{
public static void main(String s[])
{
byte b1,b2,b3;
b1=10;
b2=5;
b3=b1+b2;
System.out.println(b3);
}
}
请解释。
我是Java新手。所以我无法理解这个例外发生的原因。这里是我的代码:为什么这段代码抛出错误?
class St
{
public static void main(String s[])
{
byte b1,b2,b3;
b1=10;
b2=5;
b3=b1+b2;
System.out.println(b3);
}
}
请解释。
Java没有对字节的加法运算,所以计算b1+b2
的值将被转换为int
,并按照整数计算总和。你会得到这个错误,因为没有从int到byte的隐式转换,因为可能会失去精度。
您必须使用隐式转换的转换得到的总和为byte
:
b3=(byte)(b1+b2);
顺便说一句,这不是一个“例外”,而是一个编译时错误。运行程序时产生异常。
您需要的结果Cast
到byte
因为在Java二进制操作应至少返回int
值,所以byte+byte
是int
值,转换为b3
两个操作数b1
和b2
到byte
并为其分配的结果是byte
:
b3=(byte)(b1+b2);
b1
+ b2
自动浇注到int
(紧接更大原语),因为你可以达到第e最大值为byte
,因此如果不手动投射(这可能会导致不期望的结果),则无法将其分配给byte
。试试这个instead.-
byte b1,b2;
int b3;
b1 = 10;
b2 = 5;
b3 = b1 + b2;
添加到铸像字节这样(byte)
完整的答案
class St
{
public static void main(String s[])
{
byte b1,b2,b3;
b1=10;
b2=5;
b3=(byte) (b1+b2);
System.out.println(b3);
}
}
它将与字节铸造后工作。
b3=(byte) (b1+b2);
As +
自动转换为int。
它会抛出错误,如Type mismatch:cannot convert from int to byte
。
添加两个byte
s的结果是int
。因此,当您将int
分配给byte
时,此处有一个潜在的精确损失。这正是编译器警告你的。因此,你需要一个投()
在这里明确地做它作为
b3 = (byte) (b1+b2);
相当直接的,试试这个代码:
public class st
{
public static void main(String s[])
{
byte b1,b2,b3;
b1=10;
b2=5;
b3=(byte) (b1+b2);
System.out.println(b3);
}
}
当你添加字节值的结果将是整数,所以如果你想添加到字节,并将其分配给字节它会给你castexception.So只需将该addtion的值转换为字节或采取结果类型为整数。
什么是例外? –
[添加字节与类型转换,Java]可能的重复(http://stackoverflow.com/questions/9815970/add-bytes-with-type-casting-java) – Joe