Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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中的以下表达式.< /P> byte a = 32; byte b = (byte) 250; int i = a + b;_Java - Fatal编程技术网

Java中的字节和短数据类型可以通过显式转换接受范围之外的值。但是,更高的数据类型不能。为什么? 让我们考虑java中的以下表达式.< /P> byte a = 32; byte b = (byte) 250; int i = a + b;

Java中的字节和短数据类型可以通过显式转换接受范围之外的值。但是,更高的数据类型不能。为什么? 让我们考虑java中的以下表达式.< /P> byte a = 32; byte b = (byte) 250; int i = a + b;,java,Java,这在Java中是有效的,即使表达式byte b=(byte)250被迫将值250分配给b,该值超出类型字节的范围。因此,b被赋值为-6,因此i通过语句inti=a+b被赋值为26 同样的事情也可以用short实现,如下所示 short s1=(short) 567889999; 虽然指定的值超出了short的范围,但此语句是合法的 但是,对于更高的数据类型(如int、double、folat等)也有同样的错误,因此,以下情况无效并导致编译时错误 int z=2147483648; 这是非

这在Java中是有效的,即使表达式
byte b=(byte)250被迫将值250分配给
b
,该值超出类型字节的范围。因此,b被赋值为-6,因此
i
通过语句
inti=a+b被赋值为26


同样的事情也可以用short实现,如下所示

short s1=(short) 567889999;
虽然指定的值超出了short的范围,但此语句是合法的


但是,对于更高的数据类型(如int、double、folat等)也有同样的错误,因此,以下情况无效并导致编译时错误

int z=2147483648;

这是非法的,因为Java中的int的范围是从-21474836482147483647,上面的语句超出了该范围并发出编译时错误。为什么Java中的字节和短数据类型没有错?

区别在于文字本身。你可以做:

int z = (int) 2147483648L;
因为现在你有了一个“长”字。因此,基本上有两个步骤:

  • 将文本解析为该文本类型的有效值(
    int
    在前面的示例中,
    long
    用于“大”文本类型)
  • 将该值转换为目标类型

该错误是因为默认情况下,所有数字整数文本都是
int
,并且
2147483648
超出范围

要对此进行编码,您需要将其设置为
long
,并显式向下转换为
int

    int z = (int)2147483648L; // compiles