1

変数を次のように宣言します。

private String concatenation;

これを示しているでしょうSystem.out.println(concatenation)

null

これは長さ 4 の文字列であり、 (またはnullのようなブール型の) 値ではありません。私がそれを宣言した場合、これは理にかなっていますが、そうではありませんでした。null!null… = "null";

ただし、次のように宣言されている場合:

private String concatenation = "";

次に、System.out.println(concatenation)これを示します:

` ` // No clue how to get a space to show up in SO so I am surrounding it with ticks

なぜJavaは空の文字列を持つオブジェクトとしてそれを作成しないのですか、なぜそれを空であると定義する必要があるのですか?

4

4 に答える 4

16

ではありませ"null"null。ただし、printlnそうするように定義されているため、そのように表示されます ( Javadocsを参照)。

空の文字列に初期化されない理由Stringは、 がクラス型であり、クラス インスタンスへの参照のデフォルト値が always であるためnullです。

nullオブジェクトがまったくない場合 (つまり) と、オブジェクトが「空」の状態にある場合とでは、大きな違いがあります。

于 2013-06-09T20:24:31.720 に答える
1

これは、システムが println を機能させる方法であるためです -> 送信されたオブジェクトが null (または現在の参照を持たない参照) の場合、null を出力します。

あなたはそれを上書きすることができます:

String concatenation = null;
System.out.println(concatenation ==null ? "" : concatenation )

これは、null の代わりに空の文字列を println 関数に送信しています。参考までに: この関数は実際にはほとんどのオブジェクトで toString を呼び出して、オブジェクト自体が string でない限り、表示すべきものを取得します。

より多くの理論、試してください:

System.out.println(concatenation == null);

そして何が起こるか見てください。–(ジョロード)

于 2013-06-09T20:30:45.117 に答える
0

前に述べたように、文字列はクラスであり、変数の連結は参照変数であり、参照変数のデフォルト値は null です。この出力を見ると、初期化されていない参照変数がオブジェクトを指していないため、空の文字列 != null、これらは異なる意味を持つ 2 つの異なる値です。空の文字列を自動的に作成する場所であれば、不要なオブジェクトを作成していると思います..

于 2013-06-09T21:50:18.600 に答える