在 Java 中,在带有或不带有“.0”的双重操作中编写常量在风格上更可接受吗?
如中,
双变量= 200.0;双 d= var/250.0;双 h = 1.0 - d;
对比
双变量= 200;双 d= var/250;双 h = 1 - d;
谢谢
在 Java 中,在带有或不带有“.0”的双重操作中编写常量在风格上更可接受吗?
如中,
双变量= 200.0;双 d= var/250.0;双 h = 1.0 - d;
对比
双变量= 200;双 d= var/250;双 h = 1 - d;
谢谢
这与风格本身无关。当您编写时double var = 200;
,200
是一个整数文字,然后通过扩大原始转换将其转换为双精度。
最好具体一点 - 如果您使用的是双精度常量,请将其写为双精度:
double d = 200.0;
double another = .01;
double exp = 1E3;
以上都是浮点文字。在您的第二个示例中,具体化尤为重要:
var = 50;
double d = var / 250;
我var
故意省略了类型。目前尚不清楚d
结果将包含什么 - 它可能是0.2
或0.0
(如果var
是整数)。另一方面,如果您要编写 double d = var / 250.0
结果,则始终为0.2
.
根据需要前导和尾随零,单精度常量标记如下:
0.0
双倍。
0.0f
为浮动。
我不是 Java 人,但 C & C++ 有同样的问题。对我来说,我总是使用“.0”,这样我就不会被不需要的整数除法所困扰。它还消除了关于类型转换的偶尔编译器警告(尽管由于从整数到浮点的明确定义的类型提升语义,这些警告很少见)。
大多数人在看到具有混合类型的算术表达式时会做“双重考虑”,或者完全误解它。前导零也是如此(在较小程度上);例如在0.1
与.1
。
好的风格就是编写代码,使其易于理解,并且易于其他人维护。因此,使用正确类型的文字而不是依赖于提升和(在较小程度上)使用前导零是一种很好的风格。
正如其他人所指出的,这只是偏好和可读性的问题。请参阅以下代码和反汇编的字节码:
public class Twohundred {
public void intVersion() {
double d = 200;
}
public void dblVersion() {
double d = 200.0;
}
}
结果:
public class Twohundred extends java.lang.Object{
public void intVersion();
Code:
0: ldc2_w #2; //double 200.0d
3: dstore_1
4: return
public void dblVersion();
Code:
0: ldc2_w #2; //double 200.0d
3: dstore_1
4: return
}
如您所见,这两种方法几乎相同。
使用 .0 会更好