Java中的文字赋值[重复]

Posted

技术标签:

【中文标题】Java中的文字赋值[重复]【英文标题】:Literal Assignment in Java [duplicate] 【发布时间】:2016-09-29 18:46:34 【问题描述】:

定义有什么区别

double example = 23.1d

double example = 23.1

为什么 long、float 和 double 可以以 l、f、d 结尾?

【问题讨论】:

有些人可能认为d后缀没用。但事实并非如此。例如 123 是 int 而 123d 是 double。 【参考方案1】:

double example = 23.1d;double example = 23.1; 之间没有区别,因为没有类型后缀的浮点字面量总是被解释为双精度。

类型后缀是必要的,以避免在某些情况下产生歧义。

例如,java 支持方法重载。这意味着您可以拥有void x( float f );void x( double d ); 这两个方法都称为x;选择哪一个取决于您通过的类型;如果您传递一个已知为 float 或 double 的变量,那么事情就很清楚了;但是如果你想传递一个文字,像这样:x( 5 );,那么你必须能够指定你的意思是这个 5 是浮点数还是双精度数,以便选择正确的方法。

还有其他一些非常细微的情况,文字的类型很重要。例如以下代码:

System.out.println( "" + (2/3.3333) );
System.out.println( "" + (2/3.3333f) );

产生以下输出:

0.6000060000600006
0.600006

...因为第一个数字是双精度数,而第二个数字是浮点数。

类似的消歧问题使得“L”类型后缀成为长整型字面量所必需的。

【讨论】:

【参考方案2】:

23.1d(或只是 23.1,因为 double 是默认值)与 23.1f 是不同的数字。由于无法精确表示 23.1,因此 23.1f 是最接近 23.1 的浮点数,并且只有大约 6 个有效数字。作为双精度数,23.1 将有大约 16 个有效数字,因此可以更接近实际值。

注意

double example = 23.1f;

等价于

float f = 23.1f;
double example = (double)f;

【讨论】:

非常感谢,为什么不能精确表示双精度数? @themagiciant95 因为双精度数有限。

以上是关于Java中的文字赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java中的条件评估过程[重复]

Java运算符:|=按位或并赋值示例[重复]

在Java中为long和float原始类型赋值[重复]

java刷题--26删除有序数组中的重复项

JavaScript中的`x = y,z`逗号赋值[重复]

Multiindex Pandas Dataframe中的多重赋值[重复]