发表于: 2018-01-20 22:40:30

0 580


一.今日完成

在写接口过程中,多次遇到需要对字符串,泛型对象,集合对象以及pojo进行判空,除了用作条件判断外,有时候是为了避免空指针异常,把Java中判断String不为空的方法梳理一遍,至于集合或泛型,考虑(!= null && ! isEmpty())即可,而对于pojo判空可以转换为对string对象的判空.

1.判断一个字符串str不为空的方法有:

(1) str!=null;

(2) "".equals(str);

(3) str.length()!=0;

( length是属性,一般集合类对象拥有的属性,取得集合的大小。而length()是方法,一般字符串类对象有该方法,也是取得字符串长度。)

说明

1) null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。

2)""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。

3) null不是对象,""是对象,所以null没有分配空间,""分配了空间,例如:

    String str1 = null; str引用为空 

    String str2 = ""; str引用一个空串

    str1还不是一个实例化的对象,str2已经实例化。

    对象用equals比较,null用等号比较。

    如果str1=null;下面的写法错误: 

       if(str1.equals("")||str1==null){ } 

   正确的写法是 if(str1==null||str1.equals("")){ //先判断是不是对象,如果是,再判断是不是空字符串 }

所以,判断一个字符串是否为空,首先就要确保不是null,然后再判断长度。

     String str = xxx;

     if(str != null && str.length() != 0) { }


2.为避免NullPointerException,几种常见处理方法如下

1)用valueOf代替toString

javaBigDecimal bd = getPrice();

// good

String.valueOf(bd);

// not good

bd.toString();

2)函数尽量不要返回null,而是返回一个空的对象

Collections辅助类中有静态的 EMPTY_LIST EMPTY_SET EMPTY_MAP ,可以方便的使用它们

javapublic List<Integer> f() {

  try {

    // ...

    return result;

  } catch (SomeException e) {

    e.printStackTrace();

    return Collections.EMPTY_LIST;

  }

}

3)避免不必要的自动装箱

java// Integer getPrice();

int price = obj.getPrice();

注意getPrice返回的是Integer而不是int,因此有可能是null。当它是null的时候,赋值给int类型的变量就会抛出NullPointerException。


3.在复盘项目里,提供了一个工具类用于检查非空:DataUtils.isNotNullOrEmpty()和DataUtils.isNullOrEmpty(),把考虑判空的对象作为形参带入即可返回布尔型结果,基本满足大多数情况下的使用了,但由于这个工具类实现判空的方法较复杂,虽然便于使用但是封装严实,所以了解基本的判空操作还是十分必要.


二.明日计划

完善后台资料管理部分的列表页接口.理清业务逻辑


三.遇到问题

暂无.


四.收获

以上.



返回列表 返回列表
评论

    分享到