java字符串判空要注意的事情

正常java字符串判空,都是直接用工具类
java字符串判空要注意的事情_第1张图片
两种判空区别一目了然,
有一种情况,就是你的字符串是"null",这种的用工具类判空就不好用了,因为"null"本身就是一个字符串,而和null是两回事
java字符串判空要注意的事情_第2张图片
附加一个xml解析如果是null返回"null"的情况:
java字符串判空要注意的事情_第3张图片
解析这个xml

File f = new File(path);
 Sms sms = new Sms();
  org.w3c.dom.Document document;
   try {
          document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
          org.w3c.dom.Element element = document.getDocumentElement();
          String Module = element.getElementsByTagName("Module").item(0).getFirstChild().getNodeValue();
		  if(StringUtils.isEmpty(Module)){
               sms.setModule(null);
           }else{
               sms.setModule(Integer.valueOf(Module));//此处会报空指针
            }
   }
           catch (SAXException e) {
                	logger.error("*****" + e);
                } catch (IOException e) {
                	logger.error("*****" + e);
                } catch (ParserConfigurationException e) {
                	logger.error("*****" + e);
                }

此时的Module 是"null" ,用StringUtils.isEmpty(Module)判断返回false,走else中的代码会抛出数字转换异常

顺便提一下,打印日志的时候要打印e,别单纯打印e.getMessage()
因为你打印e,才会有对应的堆栈信息,单纯打印e.getMessage(),只有异常信息,定位不到具体代码行数,下面这种的就很不科学,(我也是刚刚才发现)

try{
//............
}
 catch (Exception e) {
     logger.error("线程:" + Thread.currentThread().getId() + "执行短信发送任务失败:" + e.getMessage());
  }

你可能感兴趣的:(java基础)