为什么“==”运算符不起作用
why "==" operator does not work
targetPixValList 是一个包含 Double 对象的列表,它还包含列表中连续位置的相似值,当我尝试使用 Code_1 比较两个 Double 值时,cnt returns 零.
当我使用 code_2 时,cnt returns 值。
列表的类型是
为什么“==”运算符不适用于 Double?
Code_1:
int cnt = 0;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i) == cs.targetPixValList.get(i+1))
++cnt;
}
Code_2:
int cnt = 0;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i).equals(cs.targetPixValList.get(i+1)))
++cnt;
}
Double
是原语 double
的 class 包装器。比较 Double
(或对象引用)的实例时使用 equals
方法而不是 ==
.
此外,对于您的情况,使用 equals
比较 Double
也可能由于浮点比较(在幕后完成)而给出错误的结果。如果您使用敏感的浮点值,我建议使用 BigDecimal
而不是 Double
并使用 BigDecimal#compareTo
而不是 equals
因为 BigDecimal#equals
不会考虑计算比例,而 BigDecimal#compareTo
计算。
您在比较对象时使用 .equals(otherObject)
。您正在比较 Double
这是一个对象。如果您使用的是 double
原语,则可以使用 == 来比较值。
或者,从 Double
对象获取 double
值:
if (yourDoubleObject.doubleValue() == otherDoubleObject.doubleValue()) {
// Do some things
}
==
运算符在 int
、long
、double
等基本类型中给出正确的结果。如果您将运算符与对象一起使用,它将默认比较引用。
使用equals
方法可能会根据对象给出正确的结果。您应该重写 equals
方法以从逻辑上接收对象是否相等的检查。
对于 Double
对象,它还检查对象的引用等价性。您应该使用 Double#doubleValue
方法来检查值是否相等。
这是代码;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i).doubleValue() == cs.targetPixValList.get(i+1).doubleValue())
++cnt;
}
另请参阅:
How to override equals and hashcode
targetPixValList 是一个包含 Double 对象的列表,它还包含列表中连续位置的相似值,当我尝试使用 Code_1 比较两个 Double 值时,cnt returns 零. 当我使用 code_2 时,cnt returns 值。
列表的类型是
为什么“==”运算符不适用于 Double?
Code_1:
int cnt = 0;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i) == cs.targetPixValList.get(i+1))
++cnt;
}
Code_2:
int cnt = 0;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i).equals(cs.targetPixValList.get(i+1)))
++cnt;
}
Double
是原语 double
的 class 包装器。比较 Double
(或对象引用)的实例时使用 equals
方法而不是 ==
.
此外,对于您的情况,使用 equals
比较 Double
也可能由于浮点比较(在幕后完成)而给出错误的结果。如果您使用敏感的浮点值,我建议使用 BigDecimal
而不是 Double
并使用 BigDecimal#compareTo
而不是 equals
因为 BigDecimal#equals
不会考虑计算比例,而 BigDecimal#compareTo
计算。
您在比较对象时使用 .equals(otherObject)
。您正在比较 Double
这是一个对象。如果您使用的是 double
原语,则可以使用 == 来比较值。
或者,从 Double
对象获取 double
值:
if (yourDoubleObject.doubleValue() == otherDoubleObject.doubleValue()) {
// Do some things
}
==
运算符在 int
、long
、double
等基本类型中给出正确的结果。如果您将运算符与对象一起使用,它将默认比较引用。
使用equals
方法可能会根据对象给出正确的结果。您应该重写 equals
方法以从逻辑上接收对象是否相等的检查。
对于 Double
对象,它还检查对象的引用等价性。您应该使用 Double#doubleValue
方法来检查值是否相等。
这是代码;
for (int i = 0; i < cs.targetPixValList.size()-1; i++) {
if (cs.targetPixValList.get(i).doubleValue() == cs.targetPixValList.get(i+1).doubleValue())
++cnt;
}
另请参阅:
How to override equals and hashcode