Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中不显示加法结果的字节_Java_Variables_Byte_Addition - Fatal编程技术网

在Java中不显示加法结果的字节

在Java中不显示加法结果的字节,java,variables,byte,addition,Java,Variables,Byte,Addition,为什么我没有得到输出,因为字节值是从-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); } } 编译时与运行时 a、 b是字节,字节没有加法运算符。在运行时,由于a,b不是最终的,所以会进行整数加法

为什么我没有得到输出,因为字节值是从-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);
   }    
}
编译时与运行时

a、 b是字节,字节没有加法运算符。在运行时,由于a,b不是最终的,所以会进行整数加法,结果是int。您正试图将其分配给一个字节。这会导致编译错误

byte c = (byte)a+b;
作为旁注。尝试将代码更改为

 final byte a = 10;
 final byte b = 20;
 byte c = a + b;
由于缩小了转换范围,因此可以很好地进行编译。如果表达式中的所有操作数都是常量,则这是可能的。

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;

由于缩小了转换范围,因此编译效果很好。如果表达式中的所有操作数都是常量,则这是可能的。

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

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

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

System.out.println(c);
}

该字节将a+b返回的int值更改为字节值。通常情况下,这是无法做到的,因为int的范围远大于byte的范围,因此会发生精度损失。无论精度如何,使用强制转换都会强制转换。

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

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

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

System.out.println(c);
}

该字节将a+b返回的int值更改为字节值。通常情况下,这是无法做到的,因为int的范围远大于byte的范围,因此会发生精度损失。无论精度如何,使用强制转换都会强制转换。

如果我更改此选项,编译时错误

byte c = a + b;
byte c = a + b;

我得到输出

30

编译时错误,如果我更改此

byte c = a + b;
byte c = a + b;

我得到输出

30
改变

它适合我。

改变


它适合我。

没有对字节类型执行操作的指令集。相反,int type的指令集用于对boolean、byte、char和short类型的操作。http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.htmljvms-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);

没有对字节类型执行操作的指令集。相反,int type的指令集用于对boolean、byte、char和short类型的操作。http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.htmljvms-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);
发生了什么事

byte a = 10;
为其分配了创建的字节类型为10的变量

byte b = 20;
byte c = a+b;
为其分配字节类型为10的变量b

byte b = 20;
byte c = a+b;
a+b自动升级为整数,因为现在求和的结果是整数,所以不能将整数分配给字节。

下面是发生的情况

byte a = 10;
为其分配了创建的字节类型为10的变量

byte b = 20;
byte c = a+b;
为其分配字节类型为10的变量b

byte b = 20;
byte c = a+b;
a+b自动升级为整数,因为现在求和的结果是整数,所以不能将整数分配给字节。

必须强制转换为字节。由于a和b是byte类型,Java将它们转换为int,然后结果是int

您必须强制转换为字节。由于a和b是byte类型,Java将它们转换为int,然后结果是int


正如你所说,Java将算术运算的结果转换为int类型,默认情况下,所有变量都是long、float、short??或者只是在字节的情况下?正如你所说,Java将算术运算的结果转换为int类型,默认情况下,所有变量都是long、float、short??或者仅仅以字节为例?我知道类型转换的概念,但我不能理解的是,由于字节值是从-128到127的C值,也就是30,那么为什么会出错?因为Java虚拟机就是这样设计的。没有对字节类型执行操作的指令集。相反,int type的指令集用于对boolean、byte、char和short类型的操作。您确定short没有加法运算符吗?我记得short+short在Java7上工作过,但是我的PC上没有Java7。是的,你可以在这里查看JVM规范-第2.11.1节:为什么会被否决?虽然我建议将JVM规范链接添加到答案的主要文本中,而不是将其保留在评论部分,但这个答案是正确的
我无法理解的是,既然字节值是C的-128到127,也就是30,那么为什么会出错呢?因为Java虚拟机就是这样设计的。没有对字节类型执行操作的指令集。相反,int type的指令集用于对boolean、byte、char和short类型的操作。您确定short没有加法运算符吗?我记得short+short在Java7上工作过,但是我的PC上没有Java7。是的,你可以在这里查看JVM规范-第2.11.1节:为什么会被否决?这个答案是正确的,尽管我建议将JVM规范链接添加到答案的主要文本中,而不是让它在注释部分保留。我知道类型转换的概念,但我无法理解的是,由于字节值是C的-128到127值,也就是30,那么为什么会出现错误?因为字节没有附加运算符,如sᴜʀᴇsʜᴀᴛᴛᴀ 说。他的解决方案比我的好,用它来代替。我知道类型转换的概念,但我不能理解的是,既然字节值是C的-128到127值,也就是30,那么为什么会出错?因为字节没有额外的运算符,比如sᴜʀᴇsʜᴀᴛᴛᴀ 说。他的解决方案比我的好,用它代替。因为Java 8,当它们是有效的最终解决方案,并且它们在OP中时就足够了code@msrd0从Java8开始,当它们实际上是最终的,并且在OP中时就足够了code@msrd0