3

奇妙な行動を見つけました。を使用してJDK 1.7います。印刷するときmap.containsValue(null)

trueMAP に null 値がありませんが、返されます。

import java.util.EnumMap;
import java.util.Map;

public class EnumMapTest {
    enum EnumType {
        ZERO, ONE, TWO
    }

    public static void main(String[] args) {
        Map<EnumType, Integer> map = new EnumMap<EnumType, Integer>(EnumType.class);
        map.put(EnumType.ZERO, 0);
        System.out.println(map.containsValue(null));
    }
}
4

2 に答える 2

3

openjdk 実装のバグです。このリンクを検討してください

理想的には false のみを与えるべきです この 1.7 SE を参照してください

このマップが 1 つ以上のキーをこの値にマップする場合は true

私にとってはそのfalse贈り物です-JRE1.7.0_55で実行されています

于 2015-02-26T08:51:37.867 に答える
2

これは、可能なすべてのキーのすべての値を検査するためです。あなたの場合

map.get(ONE) is null
map.get(TWO) is null

Java 8 では、これは行われません。null代わりに、設定されていないものNULLと null に設定された値を区別します。

于 2015-02-26T08:51:39.267 に答える