默认情况下,任何完整的原始数据类型(byte、short、int、long)都将被java 编译器视为int类型。对于byte和short,只要分配给它们的值在它们的范围内,就没有问题,也不需要后缀。如果分配给byte和short的值超出了它们的范围,则需要显式类型转换。
前任:
byte b = 130; // CE: range is exceeding.
克服这个执行类型转换。
byte b = (byte)130; //valid, but chances of losing data is there.
在长数据类型的情况下,它可以毫不费力地接受整数值。假设我们分配喜欢
long l = 2147483647; //which is max value of int
在这种情况下,不需要像 L/l 这样的后缀。默认值 2147483647 被 java 编译器认为是 int 类型。内部类型转换由编译器完成,int 自动提升为 Long 类型。
long l = 2147483648; //CE: value is treated as int but out of range
这里我们需要把后缀写成 L 来让 java 编译器把字面量 2147483648 当作 long 类型。
所以最后
long l = 2147483648L;// works fine.