我是 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
值,将两个操作数的结果转换为并将b1
其分配给:b2
byte
b3
byte
b3=(byte)(b1+b2);
b1
+b2
被自动转换为int
(立即更大的原语),因为您可以达到最大值byte
,因此您不能在byte
没有手动转换的情况下将其分配给 a(这可能会导致不希望的结果)。试试这个。-
byte b1,b2;
int b3;
b1 = 10;
b2 = 5;
b3 = b1 + b2;
byte
两个s相加的结果是int
。因此,当您将 分配给 a时,这里存在潜在的精度损失。这就是编译器警告您的内容。因此,您需要在此处进行强制转换以明确地执行此操作int
byte
()
b3 = (byte) (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
.
很简单,试试这个代码:
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);
}
}