概述
1、Map下的NPE
直接上代码:
public classUser {privateInteger id;privateString name;publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}
@OverridepublicString toString() {return "User [id=" + id + ", name=" + name + "]";
}
}
public static voidmain(String[] args) {
User user= newUser();
Map hashMap = new HashMap<>();
hashMap.put(user.getId(), user.getName());
Map concurrentHashMap = new ConcurrentHashMap<>();
concurrentHashMap.put(user.getId(), user.getName());//这里出现NullPointerException
}
Map类集合K/V能不能存储null值的情况,如下表格:
2、foreach遍历集合删除元素
在遍历集合时对元素进行add/remove操作要使用Iterator,使用for循环时会报错,一定会报错吗?看代码:
情况2:
public static voidmain(String[] args) {
List list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");for(String str : list){if("2".equals(str)){
list.remove(str);
}
}
Iterator it =list.iterator();while(it.hasNext()){
String temp=it.next();if("2".equals(temp)){
it.remove();
}
}
System.out.println(list.toString());
}
程序不会报错,貌似foreach只有操作倒数第二个元素才没问题。但是我们依然要注意不要在foreach循环里进行元素的remove/add操作。remove元素要使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
3、Arrays.asList()数组转换集合
这个工具类应该都用过,可以很方便的把数组转换为集合,但是一些细节需要注意:
public static voidmain(String[] args) {
String[] str= new String[]{"a","b"};
List list=Arrays.asList(str);
list.add("c");//报错//str[0] = "d";
for(Object o : list){
System.out.println(o);
}
}
注意:Arrays.asList()把数组转换成集合时,不能使用其修改集合的相关方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。asList()的返回对象是一个Arrays内部类,并没有实现集合的修改方法。所以,如果需要修改集合,要在转换之前操作。还需要注意一点,在你转换后,再对数组的值进行修改,集合也会跟着变化。
4、toArray()集合转换数组
当我们需要把一个集合转换成数组时,往往会调用toArray()方法,如果使用的是无参的方法,会报ClassCastException异常。
原因:直接使用toArray()无参方法返回值只能是Object[]类,若强转成其它类型数组将会抛出异常。
解决方案:使用 T[] toArray(T[] a);有参数这个方法,代码如下:
最后
以上就是美丽季节为你收集整理的java中npe问题_Java中几种常见的NPE问题的全部内容,希望文章能够帮你解决java中npe问题_Java中几种常见的NPE问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复