为什么有空指针异常,但我检查过没有空

时间:2016-08-19 14:26:12

标签: java nullpointerexception

public static boolean isIsomorphic(String s, String t) {
    HashMap<Character, Character> res1 = new HashMap<Character, Character>();
    HashMap<Character, Character> res2 = new HashMap<Character, Character>();
    char[] sToArray = s.toCharArray();
    char[] tToArray = t.toCharArray();
    if (s == null && t == null)
        return true;
    if (s == null || t == null || s.length() != t.length())
        return false;
    for (int i = 0; i < sToArray.length; i++) {
        ***if ((!res1.containsKey(sToArray[i])) && (!res2.containsKey(tToArray[i])))*** {
            res1.put(sToArray[i], tToArray[i]);
            res2.put(tToArray[i], sToArray[i]);

        } else {

            if ((res1.get(sToArray[i]) != tToArray[i]) || (res2.get(tToArray[i]) != sToArray[i]))
                return false;

        }

    }
    return true;

}

给定两个字符串s和t,确定它们是否是同构的。 当测试用例是“ab”“aa”时;会有一个nullpointerexception if((!res1.containsKey(sToArray [i]))&amp;&amp;(!res2.containsKey(tToArray [i]))) 我检查res1不等于null,res2不等于null。有人能说出原因吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

可能发生的事情是res1.get(sToArray[i])null。然后,您将Characterchar进行比较,这需要对Character进行拆箱操作 - 但它会为空并且会抛出NPE。

请注意,如果与该关键字相关联的res1.containsKey(sToArray[i])值,null将返回true。