首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NP- NP_NULL_ON_SOME_PATH

NP- NP_NULL_ON_SOME_PATH
EN

Stack Overflow用户
提问于 2015-06-02 13:21:00
回答 2查看 5.5K关注 0票数 1

Findbug正在为一行显示NP_NULL_ON_SOME_PATH

它说有一个语句分支,如果执行,它保证null值将被取消引用,这将在代码执行时生成一个NullPointerException

当然,问题可能是分支或语句不可行,null指针异常永远无法执行;决定这超出了FindBugs的能力。

这里是代码:

代码语言:javascript
复制
      public int compare(Object o1, Object o2)
      {
         ....
         String sTypeName1 = row1.getFieldValue(OBJECT_TYPE_FIELD_NAME);
         String sTypeName2 = row2.getFieldValue(OBJECT_TYPE_FIELD_NAME);
         if (sTypeName1!= null && sTypeName1.indexOf("~") != -1)
         {
            sTypeName1 = m_oc.getString(sTypeName1);
         }
         if (sTypeName2!= null && sTypeName2.indexOf("~") != -1)
         {
            sTypeName2 = m_oc.getString(sTypeName2);
         }

         int cf = sTypeName1.compareTo(sTypeName2);
         if (cf == 0)
         {
            cf = o1.toString().compareTo(o2.toString());
         }

         return cf;
       }

它显示了代码的两个相同类型的错误:

代码语言:javascript
复制
int cf = sTypeName1.compareTo(sTypeName2);

这里说,从sTypeName1加载的值中有一个可能的空指针取消引用。

因此,我不得不在这段代码之前放置一个null检查,例如:

代码语言:javascript
复制
if(sTypeName1 != null && sTypeName2 != null)
{
  int cf = sTypeName1.compareTo(sTypeName2);
}

但这个问题没有得到解决。:(

有人能提出解决办法吗?我的方法又有什么问题?

非常感谢你仔细研究了我的问题:)

EN

回答 2

Stack Overflow用户

发布于 2015-06-03 10:23:01

对我来说,这个问题已经解决了。此代码不生成错误报告:

代码语言:javascript
复制
String sTypeName1 = row1.getFieldValue("qqq");
String sTypeName2 = row2.getFieldValue("www");
if (sTypeName1 != null && sTypeName1.indexOf("~") != -1) {
    sTypeName1 = m_oc.getString(sTypeName1);
}
if (sTypeName2 != null && sTypeName2.indexOf("~") != -1) {
    sTypeName2 = m_oc.getString(sTypeName2);
}
int cf = 0;
if (sTypeName1 != null && sTypeName2 != null) {
    cf = sTypeName1.compareTo(sTypeName2);
}
if (cf == 0) {
    cf = o1.toString().compareTo(o2.toString());
}

return cf;

可能您没有重新编译您的代码,或者没有再次执行FindBugs分析。

票数 1
EN

Stack Overflow用户

发布于 2021-12-17 01:07:26

根据我的经验,这可能是由这样的情况造成的:

如果只在某些条件下设置 b ,例如如果a为非空,则稍后引用b。如果a可能真的为null,则需要处理如果b也为null时该做什么。如果a从未为空,则删除空检查。而且,对我来说,它将b定义为第一个有问题的行的行,而不是何时调用。

代码语言:javascript
复制
if (a != null) {
b = a.getB();
}

b.doSomething();

情况2-您在一个地方检查空,而不是在另一个地方检查。到处都是空中楼阁,或者哪里都没有

代码语言:javascript
复制
if (x != null) {
x.doSomething1();
}

x.doSomething2();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30597368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档