Java 为什么一个数字是合法的,另一个是非法的?

Java 为什么一个数字是合法的,另一个是非法的?,java,Java,为什么源代码中的某些数字是合法的,而其他数字是非法的 class Example{ public static void main(String args[]){ System.out.println(2147483647); //legal //System.out.println(2147483648); //illegal System.out.println(2147483648L); System.out.pr

为什么源代码中的某些数字是合法的,而其他数字是非法的

class Example{ 
    public static void main(String args[]){
        System.out.println(2147483647); //legal
        //System.out.println(2147483648); //illegal
        System.out.println(2147483648L); 
        System.out.println(9223372036854775807L);
        //System.out.println(9223372036854775808L); //Error
        System.out.println(9223372036854775808f); //Legal
        System.out.println(9223372036854775808D);//Legal
    }
}

在java中直接调用没有小数点的数字时,它会自动假定它是整数(类型为
int
,并且是有符号的)。它有一个4字节的内存空间,允许最大值为2147483647,这就是为什么这是合法的,但不是2147483648。当您放置
L
f
D
时,您告诉编译器该值将被定义为长、浮点或双精度(分别),它们具有更大的内存分配,允许更大的值范围


有关更多信息,我建议您阅读与java相关的数据类型。

请参阅
Integer.MAX_VALUE
Long.MAX_VALUE
。请参阅
System.out.println(Integer.tobinarysting(2147483647))你为什么不这么认为?因为每种类型(int、long、float、double)都有自己有限的合法值范围。另请参见和。相关:。搜索更多。