Java ==如果比较具有相同值的双精度类型,则运算符返回false
当我比较两个具有相同值的双基元类型时,为什么equal方法为false?然而,整数不是Java ==如果比较具有相同值的双精度类型,则运算符返回false,java,equals,autoboxing,Java,Equals,Autoboxing,当我比较两个具有相同值的双基元类型时,为什么equal方法为false?然而,整数不是 public class EqualMethod { public static void main(String[] args) { Double value1 = 6.2; Double value2 = 6.2; System.out.println(value1 == value2); Integ
public class EqualMethod {
public static void main(String[] args) {
Double value1 = 6.2;
Double value2 = 6.2;
System.out.println(value1 == value2);
Integer number1 = 2;
Integer number2 = 2;
System.out.println(number1 == number2);
}
}
您正在比较引用,而不是值。或者:
value1.等于(value2)代码>
或者:
value1.doubleValue()==value2.doubleValue()代码>
阅读更多关于这里的内容,找出为什么它有时有效(对于整数),有时无效。请注意,所有整数都是2:6=2+4的幂的和,而小数不是:6.2=4+2+1/8+…您是在比较引用而不是值。或者:
value1.等于(value2)代码>
或者:
value1.doubleValue()==value2.doubleValue()代码>
阅读更多关于这里的内容,找出为什么它有时有效(对于整数),有时无效。请注意,所有整数都是2:6=2+4的幂的和,而小数不是:6.2=4+2+1/8+…这两个变量都是通过装箱转换为双
对象初始化的。在对象上使用=
时,如果引用是同一对象,则会比较引用,而不会比较内容
要比较内容,可以使用,也可以检查调用的结果是否等于0
。或者,您可以将这两个变量声明为double
,然后=
将直接比较值。这两个变量都通过装箱转换为double
对象进行初始化。在对象上使用=
时,如果引用是同一对象,则会比较引用,而不会比较内容
要比较内容,可以使用,也可以检查调用的结果是否等于0
。或者,您可以将这两个变量声明为double,然后将直接比较值。=
用于参考比较
.equals
用于内容比较
1.在代码中,将创建两个对象,其中引用value1
和value2
指向不同的对象。如果使用value1==value2
它将返回false
。如果引用指向同一对象,它将返回true
Double value1 = 6.2;
Double value2 = 6.2;
2.如果使用value1.equals(value2)
它将比较对象的内容,这些内容将返回true==
用于参考比较
Double value1 = 6.2;
Double value2 = 6.2;
.equals
用于内容比较
1.在代码中,将创建两个对象,其中引用value1
和value2
指向不同的对象。如果使用value1==value2
它将返回false
。如果引用指向同一对象,它将返回true
Double value1 = 6.2;
Double value2 = 6.2;
2.如果使用value1.equals(value2)
它将比较对象的内容,返回true
equals()
用于比较对象,=
用于原始数据类型。顺便说一句,尝试执行Double value1=Double.valueOf(6.2);Double value2=Double.valueOf(6.2)因为不需要分配两个Double
对象来表示相同的值。看,这些不是primitives@2rs2ts他没有使用newdouble(6.2)
(分配新对象),因此我怀疑valueOf
是否有任何优势;只是乱七八糟的是的,会的。6.2远不是经常要求的值。而Double d=6.2
被编译为Double d=Double.valueOf(6.2)
,而不是Double d=new Double(6.2)
。因此,您的代码是一种更为冗长的方式来编写与OP完全相同的内容返回新的Double(d)
equals()
用于比较对象,=
用于原始数据类型。顺便说一句,尝试执行Double value1=Double.valueOf(6.2);Double value2=Double.valueOf(6.2)因为不需要分配两个Double
对象来表示相同的值。看,这些不是primitives@2rs2ts他没有使用newdouble(6.2)
(分配新对象),因此我怀疑valueOf
是否有任何优势;只是乱七八糟的是的,会的。6.2远不是经常要求的值。而Double d=6.2
被编译为Double d=Double.valueOf(6.2)
,而不是Double d=new Double(6.2)
。因此,您的代码是一种更为冗长的方式来编写与OP完全相同的内容返回新的Double(d)
或用Double
替换Double
@BalusC是的,这是我的答案:)整数有相同的值,为什么它是真的呢?整数(以及所有其他非fp数字
实现)用于-128和127之间的值。尝试一个超出此范围的数字:)@DurdonaInteger
有点不同,请参阅以获取解释。或者将Double
替换为Double
@BalusC是的,这是我的答案:)具有相同值的整数为什么为真呢?Integer
(以及所有其他非fpnumber
实现)用于-128 en 127之间的值。请尝试超出此范围的数字:)@DurdonaInteger
稍有不同,请参阅以获取解释。
Double value1 = 6.2;
Double value2 = 6.2;