获取我无法弄清楚的空指针异常

时间:2012-02-16 03:21:46

标签: java

我一直在研究这个问题。我继续在下面的函数中得到一个空指针异常,myProfile变量是对另一个类的引用,该类在开始时被声明为私有UserProfile myProfile,其中UserProfile是原始类,我相信这是我遇到的地方问题:

public void saveProfile()
{
    if ((myProfile!=(null)) && !(myProfile.getName().isEmpty()))
    {
        profiles.put(myProfile.getName(), myProfile);
    }
}

4 个答案:

答案 0 :(得分:3)

如果您myProfile不是null,请使用调试器检查myProfile.getName()返回的内容。如果返回null,则无法在空引用上调用isEmpty

答案 1 :(得分:1)

只要有点(.),就有可能出现空指针异常。例如,您检查myProfile是否为空,但在尝试对myProfile.getName()执行.isEmpty()之前,您不会检查profiles是否为空。

同样,如果.put()为null,则在调用{{1}}时会出现空指针异常。

答案 2 :(得分:1)

修改您的代码如下。它不会导致异常

public void saveProfile(){
    if ((myProfile!=null) && (myProfile.getName() != null) &&!(myProfile.getName().isEmpty())){
        profiles.put(myProfile.getName(), myProfile);
    }
}

答案 3 :(得分:0)

public void saveProfile()
{
  if (myProfile!=null && myProfile.getName()!=null && !myProfile.getName().isEmpty())
  {
    if(profiles==null)
      profiles = makeAnInstanceOfProfiles();

    profiles.put(myProfile.getName(), myProfile);
  }
}

使用测试代码(启用断言运行):

public void saveProfile()
{
  assert(myProfile!=null):"null at myprofile";
  assert(myProfile.getName()!=null):"null at myprofile/getName";
  assert(profiles!=null) : "profiles is null";

  if (myProfile!=null && myProfile.getName()!=null && !myProfile.getName().isEmpty())
  {
    if(profiles==null)
      profiles = makeAnInstanceOfProfiles();

    profiles.put(myProfile.getName(), myProfile);
  }
}