Java - int / long,float / double

时间:2009-08-31 18:53:52

标签: java floating-point double long-integer primitive-types

据我所知,“2.5”自动为双倍,为了使它成为浮点数,我需要做“2.5F”(或者F应该是小写吗?),我应该使用浮点数,比方说,如果我有一个只需要2个十进制空格的常数(如安大略省PST税的“0.08F”),但我不确定“12”是int还是long,但我知道“12L”很长,但是“long l = 12”和“long l = 12L”似乎编译成相同的东西,如果我想要最大的非浮点精度,我使用long,如果我知道我不需要超出int的限制,则使用int。

如果那里有不对的东西,请纠正我,并回答我的问题。

4 个答案:

答案 0 :(得分:14)

12作为java中的常量是一个int。

long l = 12编译的原因是它会自动扩展为long。

编辑:关于你的评论,自动扩展没有任何问题,使用任何使你的代码更清晰的东西,但只要知道在对原语进行数学运算时会发生什么。例如:

int i = 1213;
long l = 112321321L * i;

如果没有将第一个数字显式地设置为long,则long将具有非常不同的值,因为Java会将其视为整数数学,并导致溢出。

答案 1 :(得分:7)

如果在声明float时使用小写或大写,则没有任何区别。

  

...像安大略省PST税的“0.08F”

如果您使用这些字段作为货币,则应考虑使用BigDecimalSee this explanation及其与Sun的相关链接以获取更多详细信息。

答案 2 :(得分:3)

首先,12是int。由于您没有指定类型,因此编译器假定int,就像它没有为2.5指定类型时假设double一样。

作业

long x = 12;

编译得很好,因为当编译器隐式地将文字int值12向上转换为long时,精度不会降低。

我总是尝试使用大写类型说明符,如2.5F和12L,因为它们更容易阅读。 1和l在我喜欢的等宽字体中看起来大致相同。

答案 3 :(得分:3)

请注意,虽然int文字在分配到long变量时会自动扩展为long,但在表达时需要使用明确的long字面值值大于Integer.MAX_VALUE(2147483647)或小于Integer.MIN_VALUE( - 2147483648):

long x1 = 12; //OK
long x2 = 2147483648; // not OK! That's not a valid int literal
long x3 = 2147483648L; // OK