3

我知道“2.5”自动是双精度的,要使其成为浮点数,我需要做“2.5F”(或者 F 应该是小写的?),并且我应该使用浮点数,比如说,如果我有一个只需要 2 个小数位的常量(例如安大略省 PST 税的“0.08F”),但我不确定“12”是 int 还是 long,但我知道“12L”是 long,但“long l = 12" 和 "long l = 12L" 似乎编译成同一个东西,如果我想要最大的非浮点精度,我会使用 long's,如果我知道我不需要超出 int 的限制,我会使用 int。

如果有不对的地方请纠正我,并回答我的问题。

4

4 回答 4

14

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

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

编辑:关于您的评论,自动扩大没有任何问题,使用任何使您的代码更清晰的东西,但请注意在对原语进行数学运算时发生了什么。例如:

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

如果您没有明确地将第一个数字作为 long,那么 long 将具有非常不同的值,因为 Java 会将其视为整数数学,并导致溢出。

于 2009-08-31T18:56:46.670 回答
7

float如果在声明s 时使用小写或大写,这没有什么区别。

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

如果您将这些字段用于货币,则应考虑BigDecimal改为使用。 有关更多详细信息,请参阅 Sun 的此说明及其相关链接。

于 2009-08-31T19:01:16.583 回答
3

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

那作业

long x = 12;

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

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

于 2009-08-31T18:59:35.650 回答
3

请注意,虽然字面量在分配给变量时int会自动加宽,但在表示大于(2147483647) 或小于(-2147483648)的值时,您需要使用显式字面量:longlonglongInteger.MAX_VALUEInteger.MIN_VALUE

long x1 = 12; //OK
long x2 = 2147483648; // not OK! That's not a valid int literal
long x3 = 2147483648L; // OK
于 2009-08-31T19:06:35.340 回答