[toc]
自动拆箱导致的空指针
/**
* 自动拆箱引发的空指针,常见于状态比较
*/
@Test
public void unBoxing() {
Integer a = 99;//自动装箱 等价于 Integer.valueOf(99)
int b = a;//自动拆箱 等价于 a.intValue()
Integer c = null;
int d = c;//NPE
if (c == d) {
//do something
}
}
级联调用
/**
* 级联调用:集合取元素后直接操作、对象未判空调用toString方法(Long、Integer等)
*/
@Test
public void cascade() {
@Getter
class User {
private String name;
}
List<User> userList = Arrays.asList(new User(), new User());
if (!CollectionUtils.isEmpty(userList)) {
for (User user : userList) {
if (user.getName().contains("tom")) {
//do something
}
}
}
//List中的空对象
List<User> userList1 = Arrays.asList(null);
for (User user : userList1) {
System.out.println(user.getName());
}
}
字符串转换
@Test
public void tanslate() {
Integer i = null;
String.valueOf(i);
}
字符串判等
/**
* 字符串判等
*/
@Test
public void equals() {
String str = null;
if ("abc".equals(str)) {
//do something
}
if (str.equals("abc")) {
//do something
}
}
Map添加元素时的空指针
/**
* map添加元素时的空指针异常
*/
@Test
public void map() {
Map hashMap = new HashMap();
hashMap.put(null, "a");
hashMap.put("a", null);
Map treeMap = new TreeMap();
// treeMap.put(null, "b");//NPE
treeMap.put("b", null);
Map concurrentMap = new ConcurrentHashMap();
// concurrentMap.put(null, "c");//NPE
// concurrentMap.put("c", null);//NPE
}