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中的文字赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章