the*_*t95 6 java double literals
定义有什么区别
double example = 23.1d
Run Code Online (Sandbox Code Playgroud)
要么
double example = 23.1
Run Code Online (Sandbox Code Playgroud)
为什么long,float和double可以以l,f,d结尾?
两者之间没有区别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) );
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
0.6000060000600006
0.600006
Run Code Online (Sandbox Code Playgroud)
...因为第一个数字是双精度数,而第二个数字是浮点数。
类似的消除歧义的担心使长整数文字必须使用“ L”类型后缀。
23.1d(或只是 23.1,因为 double 是默认值)与 23.1f 是不同的数字。由于 23.1 无法精确表示,因此 23.1f 是最接近 23.1 的浮点数,并且只有大约 6 位有效数字。作为双精度数,23.1 将有大约 16 个有效数字,因此可以更接近实际值。
注意
double example = 23.1f;
Run Code Online (Sandbox Code Playgroud)
相当于
float f = 23.1f;
double example = (double)f;
Run Code Online (Sandbox Code Playgroud)