如何避免空指针错误

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)

der*_*ion 8

只需使用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)

  • 虽然这可以是一个解决方案,但我不鼓励将Arrays用于新手.每个人都应尽可能使用List (3认同)

dan*_*ben 6

问题是你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吗?