Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:double==和double=_Java_Double - Fatal编程技术网

java:double==和double=

java:double==和double=,java,double,Java,Double,关于使用double,我对一些事情感到困惑 如果我用相同的文本初始化两个double,那么==的计算结果是否总是为true?例如,如果以下输出为真,但我不知道这是否是偶然的: double a = .1d; double b = .1d; System.out.println(a==b); 当使用Double而不是Double时,我得到了相同的结果: Double a = .1d; Double b = .1d; System.out.println(a.equals(b)); 根据Doub

关于使用double,我对一些事情感到困惑

如果我用相同的文本初始化两个double,那么==的计算结果是否总是为true?例如,如果以下输出为真,但我不知道这是否是偶然的:

double a = .1d;
double b = .1d;
System.out.println(a==b);
当使用Double而不是Double时,我得到了相同的结果:

Double a = .1d;
Double b = .1d;
System.out.println(a.equals(b));
根据Double文档,如果doubleValue相等,equals返回true

所以问题是,对于使用相同文字初始化的2个变量,double的==和double的equals是否保证计算为true

他们什么时候评估为错误?这是涉及算术运算的时候吗

谢谢

通常==是检查相等性的运算符。对象变量是引用,因此它会检查引用或地址是否相等。对于表示内存中的值的基本数据类型,这也意味着它会检查值是否相等

方法equals~检查值或内容是否相等。您不将其用于基本数据类型,而是用于对象

双重和双重的情况也是如此。双精度运算产生的问题是舍入误差导致的值不匹配

有些算术运算可能会以不同的方式处理舍入,因此,即使您认为值应该相等,也可能会得到值相等的false


应该说明的是,即使舍入规则有点不一致,算术运算也是确定的,这样就可以处理不一致性。

它们何时计算false。。。当值不同时。它遵循IEEE 754标准。在第一个示例中,为什么您认为a和b可能不相等?当然,浮点数的舍入规则有点不可靠,但它们不是魔法——它们是确定性的。你认为a和b之间会发生什么情况,从而产生不同的值?double与精度有关,并遵循IEEE 754标准。请注意,当一个double变量包含NaN时,它不会等于自身,更不用说等于另一个变量了。但严格来说,不能用一个文本将NaN赋值给变量。你需要两个,比如双d=0.0/0.0;跨平台,浮点算法并不总是确定性的。为了实现等价性,应该使用StrictMath类而不是Math类。虽然我还没有看到这种不一致性,但当在x86机器上以80位模式执行内部浮点操作,并且结果存储在64位双精度存储器中时,可能会出现这种不一致性。x86以外的其他体系结构没有80位模式。