字节不在Java中显示添加结果

时间:2014-09-12 13:14:06

标签: java variables byte addition

为什么我没有得到输出,因为byte值是-128到127而结果是30?

class test15 {          
   public static void main(String ...s) {
      byte a = 10;
      byte b = 20;
      byte c = a+b;
      System.out.println(c);
   }    
}

7 个答案:

答案 0 :(得分:5)

CompileTime vs RunTime

a,b是字节,字节没有加法运算符。在运行时,由于a,b不是最终的,因此发生整数加法,结果为int。而你正试图将它分配给一个字节。这导致编译错误。

byte c = (byte)a+b;

作为旁注。尝试将代码更改为

 final byte a = 10;
 final byte b = 20;
 byte c = a + b;

由于转换范围变窄而编译得很好,如果所有操作数都是表达式中的常量值,则可以编译。

答案 1 :(得分:2)

您必须转为byte。由于ab的类型为byte,因此Java会将它们转换为int,然后结果为int

byte c = (byte) (a+b);

答案 2 :(得分:1)

编译时间错误,如果我改变了这个

byte c = a + b;

byte c = (byte) (a + b);

我得到了输出

30

答案 3 :(得分:1)

更改

byte c = a + b;

byte c = (byte)(a + b);

它对我有用。

答案 4 :(得分:0)

Java默认将算术运算的结果转换为int类型。试试这个:

public static void main(String... s)
{

    byte a = 10;
    byte b = 20;
    byte c = (byte) (a + b);

System.out.println(c);
}

(byte)将(a + b)返回的int值更改为字节值。通常,这是不可能的,因为int的范围远大于字节的范围,因此会发生精度损失。无论精度如何,使用铸造都会强制转换。

答案 5 :(得分:0)

没有指令集对byte类型执行操作。相反,int类型的指令集用于booleanbytecharshort类型的操作。http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.11.1 也 不能将较大尺寸的数据类型(占用更多存储器)分配给较小尺寸的数据类型。这不是由JVM隐式完成的,需要显式转换;由程序员执行的转换操作

结果将是一个整数。为此你必须这样做

byte a = 10;
byte b = 20;
byte c = (byte) (a + b); //u will have to typecast int to byte 

System.out.println(c);

答案 6 :(得分:0)

这里发生了什么

byte a = 10;

分配给它的10个字节类型的变量a。

byte b = 20;

分配给它的字节类型的变量b。

byte c = a+b;

a+b会自动提升为整数,因为现在求和的结果是整数,你不能将整数赋给byte。