0

コメント行を含めない場合、prevLineBufferには「null」が含まれます。コメント行を含めると、それでも機能しますが、空の文字列が出力されます。Javaは、宣言された文字列に静的にスペースを割り当ててから、コメント行の追加の文字列に動的にスペースを割り当てますか?両方とも機能しているようです...

public class Indexer {
    String input;
    StringBuilder prevLineBuffer;

    Indexer(String inputFileName) throws RuntimeException{
        input = inputFileName;
        //prevLineBuffer = new StringBuilder();
        System.out.print(prevLineBuffer);

    }//constructor
}//class
4

3 に答える 3

2

印刷するものを与えるには、の結果とそれに何かを印刷する必要があり.toString()ます.append()。例えば:

    prevLineBuffer = new StringBuilder();
    prevLineBuffer.append(inputFileName);
    System.out.print(prevLineBuffer.toString());

あなたの質問の後半に答えるために...

文字列ドキュメントから:

最初は空の文字列のプールは、Stringクラスによってプライベートに維持されます。[...]インターンメソッドが呼び出されたときに、equals(Object)メソッドによって決定されたこのStringオブジェクトに等しい文字列がプールにすでに含まれている場合、プールからの文字列が返されます。それ以外の場合、このStringオブジェクトはプールに追加され、このStringオブジェクトへの参照が返されます。

StringBuilderドキュメントから:

一般に、sbがStringBuilderのインスタンスを参照している場合、sb.append(x)はsb.insert(sb.length()、x)と同じ効果があります。すべての文字列ビルダーには容量があります。文字列ビルダーに含まれる文字シーケンスの長さが容量を超えない限り、新しい内部バッファーを割り当てる必要はありません。内部バッファがオーバーフローすると、自動的に大きくなります。-

于 2010-02-19T05:39:53.793 に答える
1

つまり、何かのnull参照をPrintStream(System.outとは何か)に出力すると、「null」が追加されます。これは、print()メソッドとprintln()メソッドが次のようなものを使用してnullを明示的にテストするためです。txt=(obj==null ? "null" : obj.toString());

StringBuilderをnullのままにする代わりに作成すると、出力されるのはStringBuilderのtoString()です。これは、何も追加していない場合は空の文字列、または...何もありません。

于 2010-02-19T07:47:49.523 に答える
0

Java は、オブジェクトにスペースを静的に割り当てません。この線

StringBuilder prevLineBuffer;

StringBuilder への参照を宣言します。コンストラクターを呼び出す前に、StringBuilder 自体は存在しません。したがって、NullPointerException が発生します - prevLineBuffer 参照が null です。

prevLineBuffer が空の理由は、単にコンテンツを追加しないためです。他の返信も参照してください。

于 2010-02-19T08:23:52.603 に答える