为什么下面的程序不能使用null值

时间:2016-03-14 04:44:00

标签: java list arraylist collections nullpointerexception

我尝试用新值替换数组中的所有相同元素,下面是我提出的代码。但是,如果我向程序添加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);
    }
}

1 个答案:

答案 0 :(得分:1)

您正在E val中传递null个对象,并在下面的行中进行比较。因此它正在提供NullPointerException

f(val.equals(it.next())){
                it.set(newVal);
}

在Java 0或null中是简单类型而不是对象。

方法equals()不是为简单类型构建的。简单类型可以与==。

匹配