Java中常见的bug

断鸿 2020年03月05日 203次浏览

自动拆箱的空指针异常

        Integer i = null;
        boolean is = i >= 0;//NPE
        System.out.println(is);

级联调用的空指针异常

	//一般会对user对象判空
	User user = new User();
	user.getBigDecimal.toString();//user对象中的bigDecimal为null

	//集合中的元素
	if (!CollectionUtils.isEmpty(list)){
		for(User user : list){
			System.out.println(user.getBigDecimal.toString());
		}
	}

字符串判等的空指针异常

    str.equals("hello);
    "hello".equals(str);//建议使用这一种方式
    StringUtils.equals("hello", str);//建议使用这一种方式

Map中的空指针异常

        Map map = new HashMap();
        map.put(null, null);//hashMap中k,v允许null

        Map map2 = new TreeMap();
        map2.put("aaa", null);
        map2.put(null, "aaaa");//NPE 不允许key为null

        Map map1 = new ConcurrentHashMap();
        map1.put(null, "hello");//NPE k,v均不允许为null
集合类keyvalueSuper说明
HashTable不允许null不允许nullDictionary
ConcurrentHashMap不允许null不允许nullAbstractMap
TreeMap不允许null允许nullAbstractMap
HashMap允许null允许nullAbstractMap

数组转换成List后如何进行元素的增删操作

String[] strArr = {"a","b","c"};
List strList = Arrays.asList(strArr);
strList.remove(1);//UnsupportedOperationException

System.out.println(list.getClass());
//class java.util.Arrays$ArrayList
System.out.println(java.util.ArrayList.class);
//class java.util.ArrayList
System.out.println(list instanceof java.util.ArrayList);
//false

//Arrays.asList返回的是Arrays的一个内部类,不同于java.util.ArrayList,这个内部类没有实现add remove等操作。如果需要对list进行操作,可以通过 set方法

java.util.ConcurrentModificationException

for(String s : strList){
	if ("c".equals(s)) {
		strList.remove(s);//如果是strList的倒数第二个不会报错
	}
}