Java中的文字作业

时间:2016-09-29 18:46:34

标签: java double literals

定义

的区别是什么
double example = 23.1d

double example = 23.1

为什么长,浮动和双重可以以l,f,d结束?

2 个答案:

答案 0 :(得分:5)

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

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

例如,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

...因为第一个数字是double,而第二个数字是float。

类似的消歧问题使得" L"长整数文字所必需的类型后缀。

答案 1 :(得分:0)

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;