1. / this.norm(); `1.` 只是语法糖吗?
1. / this.norm(); Is `1.` just syntactic sugar?
我是 Java 的新手,并不知道如何搜索它。因为谷歌搜索 1. double java
没有给我任何令人满意的搜索结果。
我遇到了这段代码:
public Vector normalize() {
final double inorm = 1. / this.norm();
return smult(inorm);
}
有人可能会说这段代码太显式了,有一个 final
局部变量。我认为由于 this.norm()
returns 和 double
无论如何,1 / this.norm()
会产生相同的效果。
1.
只是一些语法糖,意思和 1.0
一样吗?如果 this.norm()
返回 int
并且我写 1
而不是 1.
,会不会发生不同的事情(比如欧氏除法)?
它是指定双字面量的众多方法之一,没有它 1 将是一个整数,这意味着您将进行整数除法,而不是双除法...
System.out.println(1 / 3); // ==> 0 <== Uh oh, integer division
System.out.println(1. / 3); // ==> 0.333333
System.out.println(1.0 / 3); // ==> 0.333333
System.out.println(1d / 3); // ==> 0.333333
System.out.println(1D / 3); // ==> 0.333333
System.out.println( (double)1 / 3 ); // ==> 0.3333333
是语法糖吗?也许不是,我认为更多的是把戏。我更喜欢 1d,因为意图更清楚。
a) 1. 等于 1.0。这意味着你想用作双打。如果您想使用浮点数,您可以使用 1.0f。如果你想使用整数,你会使用 1。最后你会做 1L。
b) 如果您使用 1,那么您将使用整数,但 java 会将其转换为双精度数,因为它会检测到除数是双精度数。为了防止这种动态转换,最好坚持使用通用的数值类型。
我是 Java 的新手,并不知道如何搜索它。因为谷歌搜索 1. double java
没有给我任何令人满意的搜索结果。
我遇到了这段代码:
public Vector normalize() {
final double inorm = 1. / this.norm();
return smult(inorm);
}
有人可能会说这段代码太显式了,有一个 final
局部变量。我认为由于 this.norm()
returns 和 double
无论如何,1 / this.norm()
会产生相同的效果。
1.
只是一些语法糖,意思和 1.0
一样吗?如果 this.norm()
返回 int
并且我写 1
而不是 1.
,会不会发生不同的事情(比如欧氏除法)?
它是指定双字面量的众多方法之一,没有它 1 将是一个整数,这意味着您将进行整数除法,而不是双除法...
System.out.println(1 / 3); // ==> 0 <== Uh oh, integer division
System.out.println(1. / 3); // ==> 0.333333
System.out.println(1.0 / 3); // ==> 0.333333
System.out.println(1d / 3); // ==> 0.333333
System.out.println(1D / 3); // ==> 0.333333
System.out.println( (double)1 / 3 ); // ==> 0.3333333
是语法糖吗?也许不是,我认为更多的是把戏。我更喜欢 1d,因为意图更清楚。
a) 1. 等于 1.0。这意味着你想用作双打。如果您想使用浮点数,您可以使用 1.0f。如果你想使用整数,你会使用 1。最后你会做 1L。
b) 如果您使用 1,那么您将使用整数,但 java 会将其转换为双精度数,因为它会检测到除数是双精度数。为了防止这种动态转换,最好坚持使用通用的数值类型。