十三、 正确的进行对象比较
1.总是把不为空的对象放在比较的前面。
在j2ee项目中,这样的代码并不少见.name很容易是一个空值。那么在运行时就很容易抛出NullPointException.String name = request.getParameter("name"); if(name.equals(""))...{ ………… }
换成第二种形式
这样当name为空值时条件为false,与我们期望相符。而第一种形式则是一种隐患。说不准它什么时候就抛出了空指针异常。if("".equals(name))...{ … }
这样的写法也可以,但是没有必要。第二种写法更简单也同样安全if(name == null || "".equals(name)) ...{ … }
2.使用短路计算
在j2ee项目中,这样的代码也是频繁出象,没有做任何判断就调用对象的方法。谁又能保证调用者一定不会传一个空值对象进来呢?public void doXX(User user)...{ if(user.getAge() > 10)...{ … } }
当user为空时,第二个测试条件不被执行,这样才是安全的代码!在&&布尔表达式, 当前面的有一个条件为false时,那么结果为假,后面的条件不再进行测试。public void doXX(User user)...{ if((user != null) && (user.getAge() > 10))...{ … } }
同样在||布尔表达式中,当前面的有一个条件为true时,结果为真,后面的条件不再进行测试
当user 为null时,结果为真,那么后面的条件将不进行测试If((user == null) || (user.getAge() > 10))...{ ……………….. }
十四、 小心遍历集合对象
在对集合进行遍历时,经常是下面的代码
这样的代码是安全的。我们时刻要防止可恶的nullPoint产生。List serviceDepartList = counter.getServiceDepartList(); for(int i = 0; i < serviceDepartList.size();i++) ...{ ServiceDepartmentDTO serviceDepart = (ServiceDepartmentDTO)serviceDepartList.get(i); } 当serviceDepartList 为null时,那么它后面的遍历代码就抛出NullPointException.
所以在遍历集合时应该总是小心一些。 for(int i = 0; serviceDepartList != null && i < serviceDepartList.size();i++) ...{ ServiceDepartmentDTO serviceDepart = (ServiceDepartmentDTO)serviceDepartList.get(i); }
可能有些代码是这样的,
但我觉得上面的方法更简洁一些,特别是没有理由进行太多的if语句嵌套。嵌套增加了代码的复杂性,更难以阅读和理解。if(serviceDepartList != null)...{ for(int i = 0; i < serviceDepartList.size();i++) ...{ ServiceDepartmentDTO serviceDepart = (ServiceDepartmentDTO)serviceDepartList.get(i); } }