1) 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象。
DEMO:
String str = null;
str.equals("value"); ===> "value".equals(str);
2) 当valueOf()和toString()返回相同的结果时,宁愿使用前者。
BigDecimal bd = new BigDecimal();
bd.toString() ; =====> String.valueOf(bd);
public static void main(String[] args) { Object o = null; String s = String.valueOf(o); -- 不会出空指针 s = o.toString(); -- 空指针 System.out.println(s);}
String.valueOf源码:
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString();}
3) 使用null安全的方法和库 有很多开源库已经为您做了繁重的空指针检查工作。其中最常用的一个的是Apache commons 中的StringUtils。你可以使用StringUtils.isBlank(),isNumeric(),isWhiteSpace()以及其他的工具方法而不用担心空指针异常。
StringUtils方法是空指针安全的,他们不会抛出空指针异常
System.out.println(StringUtils.isEmpty(
null
));
System.out.println(StringUtils.isBlank(
null
));
System.out.println(StringUtils.isNumeric(
null
));
System.out.println(StringUtils.isAllUpperCase(
null
));
4) 避免从方法中返回空指针,而是返回空collection或者空数组。
这个Java最佳实践或技巧由Joshua Bloch在他的书Effective Java中提到。这是另外一个可以更好的使用Java编程的技巧。通过返回一个空collection或者空数组,你可以确保在调用如size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空List,Set和Map: Collections.EMPTY_LIST,Collections.EMPTY_SET,Collections.EMPTY_MAP。这里是实例。
public
List getOrders(Customer customer){
List result = Collections.EMPTY_LIST;
return
result;
}
你同样可以使用Collections.EMPTY_SET和Collections.EMPTY_MAP来代替空指针。
5)使用包装类型做参数传递和映射.
6) 为entity指定默认值 比如电话号码默认为00000000000
7) 定义数据库中字段是否可以为空.做好非空约束, 避免程序中判断!=null
来源: http://blog.csdn.net/kuyuyingzi/article/details/16973429