在Java中测试时出现空指针异常

时间:2011-10-15 21:56:12

标签: java string netbeans nullpointerexception

public boolean isItMyName(String name)
    {    
       name = fullname.substring(0,fullname.indexOf(' '));
       ...
    }

然后我的代码继续下去。当我运行它时,我得到一个空指针异常,错误指向这一行。

我还创建了一个JUnit测试器,它测试输入是真还是假。

Name myName = new Name();
assertEquals(false, myName.isItMyName("Troll");

它还在assertEquals(false, myName.isItMyName("Troll"));

给出了一个空指针异常

我的智慧结束了。我该如何解决?

@ Greg Hewgill:

在我的Name类中,我这样做:

public class Name(String n)
{
  name = n;
}

但在我的main方法中,我传入了字符串:Name myName = new Name(“Johnathy”);

因此字符串不为空。

FULLNAME:

public class EmailAddress {
private String address;



public EmailAddress(String a)
{
  address = a;

}

public String toString()
{
    return address;
}

4 个答案:

答案 0 :(得分:3)

嗯,你忽略了你的参数...你在第一行为name分配了一个新值。这意味着你的方法几乎肯定会被打破。

然后考虑fullname(我假设是一个实例变量)将来自何处。除非您在无参数构造函数中将其设置为值,否则默认情况下它将为null。这真的是你想要的吗?

我建议您将Name类更改为,仅让构造函数采用名称参数,并验证它们不是null。这样,您就永远不会有一个无效的Name对象,其全名是null

编辑:现在您发布了更多代码,查看无参数构造函数和setName方法:

public Name()
{
   setName(fullname);     
}

public void setName(String n)
{
    fullname = n;
}

这意味着您的无参数构造函数等效于:

public Name()
{
   fullname = fullname;
}

...即无操作。 fullname将为null,因此是例外。

我的建议是完全摆脱无参数构造函数,并使另一个验证参数。

答案 1 :(得分:3)

   name = fullname.substring(0,fullname.indexOf(' '));

如果在该行上获得空指针异常,则fullnamenull。这是唯一的可能性。

答案 2 :(得分:2)

没有更多的代码,我不能肯定地说,但我敢打赌你fullname是空的,从不设置任何东西。

答案 3 :(得分:0)

如果在全名中找不到''索引则不会返回-1因此导致子串抓取0,-1为空...也许将其丢弃在if中并且如果索引是<则跳过该步骤0 ...并且你的参数不应该是fullname