Java 为什么有空指针异常,但我已经检查过没有空指针异常 public静态布尔isIsomorphic(字符串s,字符串t){ HashMap res1=新的HashMap(); HashMap res2=新的HashMap(); char[]sToArray=s.toCharArray(); char[]tToArray=t.toCharArray(); 如果(s==null&&t==null) 返回true; 如果(s==null | | t==null | | s.length()!=t.length()) 返回false; for(int i=0;i

Java 为什么有空指针异常,但我已经检查过没有空指针异常 public静态布尔isIsomorphic(字符串s,字符串t){ HashMap res1=新的HashMap(); HashMap res2=新的HashMap(); char[]sToArray=s.toCharArray(); char[]tToArray=t.toCharArray(); 如果(s==null&&t==null) 返回true; 如果(s==null | | t==null | | s.length()!=t.length()) 返回false; for(int i=0;i,java,nullpointerexception,Java,Nullpointerexception,给定两个字符串s和t,确定它们是否同构。 当测试用例为“ab”“aa”时;将有一个nullpointerexception用于 if(!res1.containsKey(sToArray[i])&(!res2.containsKey(tToArray[i])) 我检查了res1不等于null,res2不等于null。有人能说出原因吗?非常感谢 可能发生的是res1.get(sToArray[i])是null。然后将该字符与字符进行比较,这需要对字符执行取消装箱操作,但该字符为空,并引发NPE 请

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

可能发生的是
res1.get(sToArray[i])
null
。然后将该
字符
字符
进行比较,这需要对
字符
执行取消装箱操作,但该字符为空,并引发NPE


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

请显示完整的堆栈跟踪,理想情况下,a。可能不是异常的源,但在检查它们是否为null之前,请将
s
t
转换为字符数组。您必须首先进行检查。不相关,但您可能不想将那些
char[]
==
进行比较=。谢谢!你说得非常正确。
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;

}