2013-10-12 64 views
-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); 
    } 
} 

请解释。

+0

什么是例外? –

+1

[添加字节与类型转换,Java]可能的重复(http://stackoverflow.com/questions/9815970/add-bytes-with-type-casting-java) – Joe

回答

2

Java没有对字节的加法运算,所以计算b1+b2的值将被转换为int,并按照整数计算总和。你会得到这个错误,因为没有从int到byte的隐式转换,因为可能会失去精度。

您必须使用隐式转换的转换得到的总和为byte

b3=(byte)(b1+b2); 

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

1

您需要的结果Castbyte因为在Java二进制操作应至少返回int值,所以byte+byteint值,转换为b3两个操作数b1b2byte并为其分配的结果是byte

b3=(byte)(b1+b2); 
1

b1 + b2自动浇注到int(紧接更大原语),因为你可以达到第e最大值为byte,因此如果不手动投射(这可能会导致不期望的结果),则无法将其分配给byte。试试这个instead.-

byte b1,b2; 
int b3; 
b1 = 10; 
b2 = 5; 
b3 = b1 + b2; 
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); 
    } 
} 
0

它将与字节铸造后工作。

b3=(byte) (b1+b2); 

As +自动转换为int。

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

1

添加两个byte s的结果是int。因此,当您将int分配给byte时,此处有一个潜在的精确损失。这正是编译器警告你的。因此,你需要一个投()在这里明确地做它作为

b3 = (byte) (b1+b2); 
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); 
    } 
} 
1

当你添加字节值的结果将是整数,所以如果你想添加到字节,并将其分配给字节它会给你castexception.So只需将该addtion的值转换为字节或采取结果类型为整数。

相关问题