为什么"=="运算符不起作用

use*_*121 -1 java double list arraylist

targetPixValList是一个包含Double对象的列表,它在列表中的连续位置也包含类似的值,当我尝试使用Code_1比较两个Double值时,cnt返回零.当我使用code_2时,cnt返回值.

并且列表的类型是

为什么"=="运算符不适用于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;
    }
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 7

Double是原语的类包装器double.比较Double(或对象引用)的实例时使用equals方法而不是==.

此外,对于您的情况,由于浮点比较(在幕后完成)Double,使用比较equals也可能给出错误的结果.如果你有敏感的浮动点值的工作,我建议使用BigDecimal的替代Double和使用BigDecimal#compareTo,而不是equals因为BigDecimal#equals没有考虑到规模,同时BigDecimal#compareTo做.