为什么这段代码会抛出错误?

时间:2013-10-12 09:45:26

标签: java

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

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

请解释。

8 个答案:

答案 0 :(得分:2)

Java没有字节的加法运算符,因此要计算b1+b2,值将转换为int,并且计算总和为整数。您得到错误,因为没有从int到byte的隐式转换,因为可能会丢失精度。

您必须使用隐式转换转换才能将总和计为byte

b3=(byte)(b1+b2);

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

答案 1 :(得分:1)

您需要Cast结果byte,因为java中的二进制操作至少应该返回int值,因此byte+byteint值,将两个操作数b1b2的结果转换为byte,并将其分配给b3 byte

b3=(byte)(b1+b2);

答案 2 :(得分:1)

b1 + b2会自动投放到int(更大的原语),因为您可以达到最大byte值,因此无法分配没有手动投射到byte(这可能会导致不希望的结果)。试试这个.-

byte b1,b2;
int b3;
b1 = 10;
b2 = 5;
b3 = b1 + b2;

答案 3 :(得分:1)

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

b3 = (byte) (b1+b2);

答案 4 :(得分:1)

当你添加到字节值时,结果将是整数,所以如果你试图添加到字节并将其分配给字节,它会给你castexception.So只需输入add的值到byte或取结果输入整数。

答案 5 :(得分: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);
    }
}

答案 6 :(得分:0)

在使用byte进行转换后它将起作用。

b3=(byte) (b1+b2);

+自动转换为int。

它会抛出Type mismatch:cannot convert from int to byte之类的错误。

答案 7 :(得分: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);
    }
}