首页 > 解决方案 > 当键和值相同时,为什么`java.util.LinkedHashMap`不相等?

问题描述

我有一个只有一个元素的linkedHashMap,我想比较它是否相等。所以我写了下面的 spock 测试用例:

    def "Get average value for a date key"() {
    given:
    def ex = ["08-2018": 13 as BigDecimal] as Map<String, Integer>

    when:
    def wta = new worktime_average()
    def result = wta.get_time_vals(wtime, '08-2018') as Map<String, Integer>

    then:
    result.values()[0] == ex.values()[0] // Pass!
    result.keySet() == ex.keySet() // Pass!
    result == ex // Failed!!
    }

它没有说:

result == ex
|      |  |
|      |  [08-2018:13] (java.util.LinkedHashMap)
|      false
[08-2018:13] (java.util.LinkedHashMap)

我不知道为什么。有什么猜测吗?

标签: groovyspock

解决方案


在 Groovy 中,String(单引号)不等同于GString(双引号)——当它们用作 Map 键时,这通常会弹出。String通过调用as String.toString()在设置/使用密钥之前确保您的密钥是s。


推荐阅读