1

在 Java 中,在带有或不带有“.0”的双重操作中编写常量在风格上更可接受吗?

如中,

双变量= 200.0;双 d= var/250.0;双 h = 1.0 - d;

对比

双变量= 200;双 d= var/250;双 h = 1 - d;

谢谢

4

6 回答 6

4

这与风格本身无关。当您编写时double var = 200;200是一个整数文字,然后通过扩大原始转换将其转换为双精度。

最好具体一点 - 如果您使用的是双精度常量,请将其写为双精度:

double d = 200.0;
double another = .01;
double exp = 1E3;

以上都是浮点文字。在您的第二个示例中,具体化尤为重要:

var = 50;
double d = var / 250;

var故意省略了类型。目前尚不清楚d结果将包含什么 - 它可能是0.20.0(如果var是整数)。另一方面,如果您要编写 double d = var / 250.0结果,则始终为0.2.

于 2009-10-17T02:38:41.817 回答
2

根据需要前导尾随零,单精度常量标记如下:

0.0双倍。

0.0f为浮动。

于 2009-10-17T02:43:28.003 回答
1

我不是 Java 人,但 C & C++ 有同样的问题。对我来说,我总是使用“.0”,这样我就不会被不需要的整数除法所困扰。它还消除了关于类型转换的偶尔编译器警告(尽管由于从整数到浮点的明确定义的类型提升语义,这些警告很少见)。

于 2009-10-17T02:31:38.210 回答
1

大多数人在看到具有混合类型的算术表达式时会做“双重考虑”,或者完全误解它。前导零也是如此(在较小程度上);例如在0.1.1

好的风格就是编写代码,使其易于理解,并且易于其他人维护。因此,使用正确类型的文字而不是依赖于提升和(在较小程度上)使用前导零是一种很好的风格。

于 2009-10-17T06:40:18.103 回答
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

}

如您所见,这两种方法几乎相同。

于 2009-10-17T06:49:41.627 回答
0

使用 .0 会更好

于 2009-10-17T02:34:12.450 回答