Java中的字节和短数据类型可以通过显式转换接受范围之外的值。但是,更高的数据类型不能。为什么? 让我们考虑java中的以下表达式.< /P> byte a = 32; byte b = (byte) 250; int i = a + b;
这在Java中是有效的,即使表达式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; 这是非
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的范围是从-2147483648到2147483647,上面的语句超出了该范围并发出编译时错误。为什么Java中的字节和短数据类型没有错?区别在于文字本身。你可以做:
int z = (int) 2147483648L;
因为现在你有了一个“长”字。因此,基本上有两个步骤:
- 将文本解析为该文本类型的有效值(
int
在前面的示例中,long
用于“大”文本类型)
- 将该值转换为目标类型
该错误是因为默认情况下,所有数字整数文本都是int
,并且2147483648
超出范围
要对此进行编码,您需要将其设置为long
,并显式向下转换为int
:
int z = (int)2147483648L; // compiles