Java - int/long,float/double
我明白“2.5”是自动加倍的,为了使它成为一个浮点数,我需要做“2.5F”(或者应该是小写吗?),而且我应该使用一个浮点数,例如,如果我有一个常量,只需要2个小数位(例如“0.08F”用于安大略PST税),但我不确定“12”是int还是long,但是我知道“12L”很长,但是“long l = 12”和“long l = 12L”似乎编译成相同的东西,如果我想要最大的非浮点精度,我使用long,如果我知道我不会需要超出int的限制。Java - int/long,float/double
请纠正我,如果有什么不对的地方,并回答我的问题。
12作为java中的常量是int。
long l = 12编译的原因是它会自动扩展为很长的。
编辑:关于您的评论,自动加宽没有任何问题,使用任何使您的代码更清晰的方法,但只要知道在对基元进行数学运算时会发生什么。例如:
int i = 1213;
long l = 112321321L * i;
长将有一个非常不同的值,如果你没有明确提出是第一个数字为长因为Java将其当作整数运算,并导致溢出。
首先,12是int
。由于您没有指定类型,因此编译器会假定为int
,就像您未指定2.5的类型时一样,它假定为double
。
分配
long x = 12;
因为没有精度损失时,编译器隐upcasts字面int
值12到long
编译就好了。
我总是尝试使用大写的类型说明符,如2.5F和12L,只是因为它们更易于阅读。 1和l在我喜欢的等宽字体中看起来差不多。
如果您在申报float
时使用小写或大写字母,这并没有什么不同。
...像 “0.08F” 安大略PST税
如果您使用的是这些领域的货币,你应该考虑使用BigDecimal
代替。 See this explanation及其与Sun有关的更多详细信息。
注意的是,虽然int
文字将分配给一个long
变量时自动扩大至long
,你会表达值大于Integer.MAX_VALUE
(2147483647)或小于Integer.MIN_VALUE
(当需要使用一个明确的long
文字 - 2147483648):
long x1 = 12; //OK
long x2 = 2147483648; // not OK! That's not a valid int literal
long x3 = 2147483648L; // OK
我应该把L放在哪里,或者让它自动加宽? – mk12 2009-08-31 18:59:57
自动加宽没有任何问题,请使用任何使您的代码更清晰的方法。 – Yishai 2009-08-31 19:01:05