-2

我是 Java 新手。所以我无法理解发生此异常的原因。这是我的代码:

class St
{
    public static void main(String s[])
    {
        byte b1,b2,b3;
        b1=10;
        b2=5;
        b3=b1+b2;
        System.out.println(b3);
    }
}

请解释。

4

8 回答 8

2

Java 没有字节的加法运算符,因此计算b1+b2值被转换为int和计算总和与整数一样。您会收到错误,因为由于可能会丢失精度,因此没有从 int 到 byte 的隐式转换。

您必须使用隐式转换来获得总和byte

b3=(byte)(b1+b2);

顺便说一句,这不是“异常”,而是编译时错误。运行程序时会产生异常。

于 2013-10-12T09:49:19.237 回答
1

您需要Cast结果,byte因为java中的二进制操作至少应该返回int值,所以byte+byte是一个int值,将两个操作数的结果转换为并将b1其分配给:b2byteb3byte

b3=(byte)(b1+b2);
于 2013-10-12T09:47:20.233 回答
1

b1+b2被自动转换为int(立即更大的原语),因为您可以达到最大值byte,因此您不能在byte没有手动转换的情况下将其分配给 a(这可能会导致不希望的结果)。试试这个。-

byte b1,b2;
int b3;
b1 = 10;
b2 = 5;
b3 = b1 + b2;
于 2013-10-12T09:47:30.580 回答
1

byte两个s相加的结果是int。因此,当您将 分配给 a时,这里存在潜在的精度损失。这就是编译器警告您的内容。因此,您需要在此处进行强制转换以明确地执行此操作intbyte()

b3 = (byte) (b1+b2);
于 2013-10-12T09:48:06.743 回答
1

当您添加到字节值时,结果将是整数,因此如果您尝试添加到字节并将其分配给字节,它会给您强制转换异常。因此只需将添加的值类型转换为字节或将结果类型作为整数。

于 2013-10-12T09:51:22.193 回答
0

像这样添加强制转换到字节(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);
    }
}
于 2013-10-12T09:47:36.600 回答
0

使用字节转换后它将起作用。

b3=(byte) (b1+b2);

As+自动转换为 int。

它会抛出错误,如Type mismatch:cannot convert from int to byte.

于 2013-10-12T09:47:53.603 回答
0

很简单,试试这个代码:

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);
    }
}
于 2013-10-12T09:49:17.047 回答