Jes*_*ssy 0 java null pointers arraylist
我试图找出2个arrayLists的元素是否匹配.但是这段代码给了我错误,Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException因为有些元素是null.
我怎样才能解决这个问题?
String level []={"High","High","High","High","High","High"};
ArrayList<Object> n = new ArrayList<Object>(Arrays.asList(level));
String choice []={null,"High","Low","High",null,"Medium"};
ArrayList<Object> m = new ArrayList<Object>(Arrays.asList(choice));
//Check if the two arrayList are identical
for(int i=0; i<m.size(); i++){
if(!(m.get(i).equals(n.get(i)))){
result= true;
break;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
只需使用Arrays.equals,如下所示:
String level []={"High","High","High","High","High","High"};
String choice []={null,"High","Low","High",null,"Medium"};
return Arrays.equals(level, choice);
Run Code Online (Sandbox Code Playgroud)
问题是你equals在没有先检查的情况下调用某些元素上的方法null.
改成:
for(int i=0; i<m.size(); i++){
if(m.get(i) != null && !(m.get(i).equals(n.get(i)))){
result = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果要允许两个null值进行比较相等:
for(int i=0; i<m.size(); i++){
if (m.get(i) == null) {
if (n.get(i) != null) {
result = true;
}
} else if(!(m.get(i).equals(n.get(i)))){
result = true;
}
if (result) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
有一点我不明白 - 为什么当你发现不匹配时你将结果设置为true?如果两个列表匹配,你不想返回true,否则你不想返回false吗?