Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 整数和双差_Java - Fatal编程技术网

Java 整数和双差

Java 整数和双差,java,Java,先谢谢你。。。 请解释发生以下情况的原因: Integer i1 = 6; Integer i2 = 6; (i1==i2)将返回true 当 Double d1 = 6.5; Double d2 = 6.5; (d1==d2)将返回false 为什么呢?在这两种情况下,将只创建一个对象,但它们的行为不同。使用equals方法会更好,但我对这种行为感到惊讶,我只是想知道。官方解释是,第5.1.7章的最后4段。您通过引用比较整数(大写I)对象,这不是java中比较对象的“正确”方法 缓存对某些

先谢谢你。。。 请解释发生以下情况的原因:

Integer i1 = 6;
Integer i2 = 6;
(i1==i2)
将返回true

Double d1 = 6.5;
Double d2 = 6.5;
(d1==d2)
将返回false


为什么呢?在这两种情况下,将只创建一个对象,但它们的行为不同。使用equals方法会更好,但我对这种行为感到惊讶,我只是想知道。

官方解释是,第5.1.7章的最后4段。

您通过引用比较整数(大写I)对象,这不是java中比较对象的“正确”方法

缓存对某些整数的引用以优化性能。这就是为什么在Java中,通过引用比较某些Integer(大写I)对象在少数情况下似乎是有效的


这不是Java开发人员期望依赖或使用的行为,因为它不可靠,可能会更改,并使代码更难理解。

Integer caching,查一下。这应该能提供一些见解:@user3199285:你的问题基本上是重复的:看这个答案:看看Integer.valueOf和Double.valueOf的源代码。