Java为空(null)校验
我们经常在程序中为了加强健壮性加入一些对字符串、对象、原始数据类型的是否为空或者是否是null的判断,这里主要围绕字符串展开,其他的会一带而过。
首先我们需要数据的来源,我分了两种:
(1)程序中内部定义,如:String str="123";又或者String str = new String("123");
(2)从第三方datasource获取,如DB、XML等
那我们在程序中经常使用的对字符串数据的判断方法总结如下:
//大致其实也是两类1) == [即引用地址的比较]2) 调用java.lang.String.equals(Object object)
现在我们在程序中预定义以下五种string变量:
String flag1 = new String("");String flag2 = "null";String flag3 = null;String flag4 = new String("null");String flag5 = "";数据来源以从数据库读取为例:

数据库中第一个是存的“”、第二个是"null"、第三种是null对象
在程序中分别比较相应的结果:
try {while (rs.next()) {String str = rs.getString("pagename");System.out.println("1."+ (str == flag1));System.out.println("2."+ (str == flag2));System.out.println("3."+ (str == flag3));System.out.println("4."+ (str == flag4));System.out.println("5."+ (str == flag5));System.out.println();System.out.println("6."+(str.equals(flag1)));System.out.println("7."+(str.equals(flag2)));System.out.println("8."+(str.equals(flag3)));System.out.println("9."+(str.equals(flag4)));System.out.println("10."+(str.equals(flag5)));System.out.println();}} catch (NullPointerException e) {System.out.println(e);}输出结果如下:
1.false2.false3.false4.false5.false[color=red]6.true[/color]7.false8.false9.false[color=red]10.true[/color]******1.false2.false3.false4.false5.false6.false[color=red]7.true[/color]8.false[color=red]9.true[/color]10.false******1.false2.false[color=red]3.true[/color]4.false5.false[color=red]java.lang.NullPointerException[/color]
SO...在判断时
1)如果来源是"" 使用.equals("")可迅速判断,过滤掉数据,使用其他几个也不会出现NPE
2)如果来源是"null" 使用.equals("null")可迅速判断,过滤掉数据,使用其他几个也不会出现NPE
3)如果是对象null,使用==null可迅速判断,过滤数据,使用其他几个会出现NPE
所以以后不要盲目的不知道用什么方法来判断是否为空来过滤字符串了,综上推荐的组合便是:
[color=darkred]//一定记得把==这种方式放在最前[/color]if(str== null || str.equals("null") || str.equals("")){//todo}