我尝试用新值替换数组中的所有相同元素,下面是我提出的代码。但是,如果我向程序添加null值,IDE将显示NullPointerException。为什么会这样?
public class ReplaceAllOfTheSameElements {
public static <E> void replace(List<E> list, E val, E newVal){
for(ListIterator<E> it = list.listIterator(); it.hasNext();){
if(val.equals(it.next())){
it.set(newVal);
}
// if(val == null ? it.next() == null : val.equals(it.next())){
// it.set(newVal);
// }
}
}
public static void main(String[] args) {
List<Integer> ci1 = new ArrayList<>(Arrays.asList(null, 22, 33, 44, 55, 66, 77));
ReplaceAllOfTheSameElements.replace(ci1, null, 11);
System.out.println(ci1);
}
}
答案 0 :(得分:1)
您正在E val中传递null
个对象,并在下面的行中进行比较。因此它正在提供NullPointerException
f(val.equals(it.next())){
it.set(newVal);
}
在Java 0或null
中是简单类型而不是对象。
方法equals()
不是为简单类型构建的。简单类型可以与==。