在Java中,“floating point literal”和“floating literal”是相同的吗?
另外,在Java中是否有称为“double literal”的东西?
另外,在Java中是否有称为“double literal”的东西?
float
和double
都是浮点数类型。float
的字面量,而不是一般的任何浮点类型。f
或F
,否则所有以#.#
形式呈现的数字面量都是double
类型。这将强制将其转换为float
。浮点字面量
如果浮点文字以字母F或f结尾,则浮点文字的类型为float;否则,它的类型为double,并且可以选择以字母D或d结尾。
浮点类型(float和double)也可以使用E或e(用于科学计数法),F或f(32位浮点文字面量)和D或d(64位双精度文字面量;默认情况下按照惯例省略)。
double d1 = 123.4; // same value as d1, but in scientific notation double d2 = 1.234e2; float f1 = 123.4f;
正如@Bubletan在评论中提到的,如果你真的很好奇,你可以查看实际的Java规范来了解浮点文字字面量:§3.10.2. 浮点文字面量
float
字面量的示例:1e1f 2.f .3f 0f 3.14f 6.022137e+23f
double
字面量的例子:1e1 2. .3 0.0 3.14 1e-9d 1e137
float
和double
更多的浮点类型,例如long double
)。 - TravisJava有带有f
后缀的float
字面量(例如2.5f)和不需要后缀的double
字面量(例如2.5)。
当你尝试将这些字面量分配给变量时,两者之间的区别就会显现:
double dl = 2.5; // passes compilation
float fl1 = 2.5; // error - "Type mismatch: cannot convert from double to float"
float fl2 = 2.5f; // passes compilation
这两个可以被视为浮点字面量,因为double
和float
都是浮点类型。
F
或f
结尾,"floating-point literal"将会是float类型;否则它是double类型。