toString()方法错误

时间:2013-03-10 22:54:10

标签: java arrays nullpointerexception tostring

public class X {
// some fields
private Route[] tabT = new Route[50]; // [1]

public String toString() {
    int i;
    String descT = "";
    for (i = 0; i < tabT.length; i++)
        descT += tabT[i].toString();
    String description;
    description = "MESSAGE " + lastName
            + "\nMESSAGE " + firstName
            + "\nMESSAGE " + year
            + "\nMESSAGE " + address
            + "\nMESSAGE " + number
            + "\nMESSAGE " + descT
            + "\n";
    return description;
}

我的类包含一些字段,包括来自另一个类tabT的对象列表。在toString()方法中,我想显示那些字段和另一个对象的字段,但我不知道它为什么显示错误。当我创建on元素的选项卡时,它不会显示错误。

Exception in thread "main" java.lang.NullPointerException
    at Chauffeur.toString(Chauffeur.java:38)
    at java.lang.String.valueOf(String.java:2854)
    at java.io.PrintStream.println(PrintStream.java:821)
    at AutoSuperieur.main(AutoSuperieur.java:6)

正好在这一行descT += tabT[i].toString();

2 个答案:

答案 0 :(得分:0)

if (tabT != null) 
  descT += (tabT[i] == null?"":tabT[i].toString());

确保您了解它的工作原理。您在NullPointerException中有toString()。然后你应该检查哪个变量可能是null值。编辑完问题后,我看到tabT已初始化,因此if (tabT != null)检查不是必需的,但它会保护上面的代码免受NullPointerException的影响,因为在第二行中我使用了引用{{1}可能尚未初始化的。接下来,operator []解除数组中可能为tabT值的元素。三元运算符null检查该值,如果它是?,则返回null,否则""元素的值。要使此调用成为可能,该值不应为toString()。然后我使用分组null将结果字符串返回到连接运算符(),该运算符以递增方式连接旧值和新值。

答案 1 :(得分:0)

您可以使用String.valueOf()来处理空值。

descT += String.valueOf(tabT[i]);

此外,运营商+=执行复制(至少在一般情况下)。您最好使用StringBuilder来处理大型连接。