【问题标题】:toString() method errortoString() 方法错误
【发布时间】:2013-03-10 22:54:09
【问题描述】:
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() 方法中,我想显示这些字段和另一个对象的字段,但我不知道为什么它会显示错误。当我在元素上创建标签时,它不会显示错误。

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();

【问题讨论】:

  • 你能发布更多代码吗?即围绕tabT。它似乎为空。
  • tabT 或其元素之一很可能是null
  • 顺便说一句,你不应该使用 String 来连接 man 字符串。你最好使用 StringBuilder
  • @Legend 我改了!
  • 为什么不使用 ArrayList 而不是数组?鉴于您的算法,很明显 tabT 数组的某些元素为空。所以你应该在给他们打电话之前检查一下toString()

标签: java arrays nullpointerexception tostring


【解决方案1】:
if (tabT != null) 
  descT += (tabT[i] == null?"":tabT[i].toString());

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多