我是 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其分配给:b2byteb3byte
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时,这里存在潜在的精度损失。这就是编译器警告您的内容。因此,您需要在此处进行强制转换以明确地执行此操作intbyte()
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);
}
}