我已阅读了有关文字及其使用方法的部分。例如,您可以在数字的末尾添加l或L,以表示int是long类型。浮点数(f或F和d或D)也是如此。在数字的末尾区分这个字符有什么意义。当我们给出类型时,它还不知道为什么再次指定?那么,将这个字符添加到数字的末尾究竟是什么意思呢?它在哪里使用?
我已经尝试在google和堆栈溢出上搜索这些问题,但是还没有得到很好的答案。
答案 0 :(得分:3)
编译器知道如何处理表达式的最终结果,但表达式中的各个文字(或变量)都有自己的类型,表达式中的中间值也是如此。例如:
static final double HALF = 1 / 2;
实际上将值为零,因为文字1和2是int
- 类型,除法是整数除法,它产生int
值为零,然后Java将其转换为double
。相反,在表达式中
static final double HALF = 1d / 2;
编译器知道将第一个值视为double
。第二个值被提升,Java进行浮点除法,结果是0.5
正如预期的那样。
还有其他情况,例如自动装箱,编译器可能根据其类型不同地处理等效值;当传递给采用Object
的方法时,0
为Integer
,而0L
为Long
。这种情况经常发生在持久性/ DAO代码中。此外,编译时,编译器会计算编译时常量表达式并将其值直接放入代码中。由于类型的精度不同,float
和double
表达式的值可能不同,因此您需要指定是否要将浮点表达式视为float
而不是double
(默认值)。
答案 1 :(得分:1)
除非您已将L或D附加到其中,否则不能在java中的任何位置使用大于2147483647的值。 l使文字长类型和d成为文字双重类型。
e.g。的System.out.println(2147483648);将导致错误以及 long num = 2147483650;也会导致错误,因为这些文字不再是int类型,它是整数的默认类型。因此,通过将l或d附加到数字,可以将其用作int或double类型。