1

重複の可能性:
Java でヌル文字列を連結する

次のコードがそのように機能する理由を誰かが説明できるかどうか疑問に思っています:

String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());

これにより、「nullnull」がコンソールに出力されます。

私は、操作 + が例外をスローするか、程度は低いが "c" が null になることを期待していました。

4

3 に答える 3

9

そのコードはにコンパイルされるため

String c = new StringBuilder().append(a).append(b).toString();

その結果をStringBuilder.append(a)追加しString.valueof(a)ます"null"if aisnull

于 2012-04-12T18:41:24.603 に答える
2

null連結演算子で必要な「文字列変換」では、文字列表現が必要な場合は常にnull 値を 4 文字にマップする必要があります。

文字列変換の仕様: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.11

文字列連結の仕様: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18.1

于 2012-04-12T18:44:34.623 に答える
0

Java がnull文字列の連結中に参照を見つけると、それを string に変換します"null"。正しい"nullnull"結果も同様です。

すべてのオブジェクト Java 呼び出しの連結前

java.lang.String.valueOf(Object)

そのメソッドのソースコードを見ると、これが見つかります

public static String valueOf(Object obj) {
  return (obj == null) ? "null" : obj.toString();
}
于 2012-04-12T18:42:15.473 に答える