String name; if (name.equals("") {} 如何避免空指针错误NullPointerException?
下面是应用场景:
record.getName() 返回一个String类型的变量name
这个name可能是null
发现有程序员写了这样一段代码
下面这种写法就容易报NullPointerException 下面这种就是一种严重错误的写法, 当name=null的时候,下面的句中 name.equals("")被执行的时候,就会运行异常(因为null对象根本不可能有equal方法可调用),
根本不会进行name == null的判断。 导致程序崩溃
public class ContactsService {
String name = record.getName();
// 若name本身为空字符串,则传值nameEn
if (name.equals("") || name == null) {
dto.setName(record.getNameEn());
} else {
dto.setName(record.getName());
}
改成下面的,就不会发生异常
String name = record.getName();
// 若name本身为空字符串,则传值nameEn
if (name == null || name.equals("")) {
dto.setName(record.getNameEn());
} else {
dto.setName(record.getName());
}
但是,还有一个问题,如果name为空格字符串呢? 需要trim()操作
下面是Frank的优雅代码。保证任何情况下都不会NullPointerException!
public class ContactsService {
// 若name本身为空字符串,则传值nameEn
String name = record.getName();
name = name == null ? "" : name.trim();
if (name.equals("")) {
dto.setName(record.getNameEn());
} else {
dto.setName(record.getName());
}