android的Findbugs问题整理

1. 对字符串不相等的判断

  • 错误
if  (chapterInfo.getPayMode() != String.valueOf(com.shuqi.base.common.Constant.PAYMODE_BOOK) && chapterInfo.getPayMode() !=
         String.valueOf(com.shuqi.base.common.Constant.PAYMODE_CHAPTER) && drawType == DrawType.DRAW_COUNT_DOWN_TYPE) {
     mRenderData.setDrawType(DrawType.DRAW_LOADING_TYPE);
}
  • 正确
if  (!String.valueOf(com.shuqi.base.common.Constant.PAYMODE_BOOK).equals(chapterInfo.getPayMode()) && !String.valueOf(com.shuqi.base.common.Constant.PAYMODE_CHAPTER)
         .equals(chapterInfo.getPayMode()) && drawType == DrawType.DRAW_COUNT_DOWN_TYPE) {
     mRenderData.setDrawType(DrawType.DRAW_LOADING_TYPE);
}

或者调用 TextUtils.equals() 方法

2. 典型数组越界

图1

图2

3. 创建文件夹判断返回值

在创建文件时,虽然判断了文件不存在再创建,但未处理创建失败的情况,会有不可预知的错误,应该处理下创建失败的情况(但不是一味的try),应给外部返回相应的错误码。

4. 创建单实例,保证线程安全

public  static  DownFileManager getInstance() {
     if  (mInstance ==  null ) {
         mInstance =  new  DownFileManager();
     }
     return  mInstance;
}
  • 正确的做法是:
public  static  DownFileManager getInstance() {
     if  (mInstance ==  null ) {
         synchronized  (DownFileManager. class ) {
             if  (mInstance ==  null ) {
                 mInstance =  new  DownFileManager();
             }
         }
     }
     return  mInstance;
}

public  synchronized  static  DownFileManager getInstance() {
     if  (mInstance ==  null ) {
         mInstance =  new  DownFileManager();
     }
     return  mInstance;
}

5. 关于弱引用

使用SoftReference.get()可能会有空指针异常, 必须 对返回值进行判断

6. 分支执行代码相同(DB_DUPLICATE_BRANCHES)

这个就是if-else分支中执行的代码是一样的,一种好的编程实践就是在写if时,一定要考虑到是否需要else分支,某些团队要求有if分支,就必须要有else分支,哪怕else分支什么也不做。

7. 需要float或double类型变量,除法运算分子或分母需要一个float或double

8. switch要实现default(SF_SWITCH_NO_DEFAULT)

9. 静态变量尽量final,若需要赋值操作,降低可见性设置set/get方法

不允许直接访问一个变量,必须提供对应的方法来访问,这是一个强制性的规约。静态常量请一定要添加 final 关键字。

10. float与double类型值判断相等的问题

图3

图4
请使用Utility.floatEquals方法来判断

public  static  boolean  floatEquals( float  a,  float  b) {
      return  Math.abs(a - b) < . 0000001 ;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值