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

4

2 に答える 2

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

それがどのように機能するかを確実に理解するため。あなたはに持っNullPointerExceptionていtoString()ます。次に、どの変数がnull値になるかを確認する必要があります。質問を編集した後tabT、それは初期化されていることがわかります。if (tabT != null)チェックは必須ではありませんが、2行目では初期化されていない可能性のあるNullPointerException参照を使用しているため、上記のコードを保護します。tabT次に、演算子[]は、null値になる可能性のある配列の要素を参照解除します。三項演算子?はその値をチェックし、そうでない場合は要素の値をnull返します。この呼び出しを可能にするには、値を。にしないでください。次に、グループ化を使用して、結果の文字列を連結演算子に返します""toString()null()+=古い値と新しい値を段階的に連結します。

于 2013-03-10T22:56:18.623 に答える
0

nullを処理するために使用できますString.valueOf()

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

その上、オペレーター+=はコピーを実行します(少なくとも一般的な場合)。StringBuilder大きな連結を処理するには、より適切に使用する必要があります。

于 2013-03-10T23:05:00.760 に答える