重複の可能性:
Java でヌル文字列を連結する
次のコードがそのように機能する理由を誰かが説明できるかどうか疑問に思っています:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
これにより、「nullnull」がコンソールに出力されます。
私は、操作 + が例外をスローするか、程度は低いが "c" が null になることを期待していました。
重複の可能性:
Java でヌル文字列を連結する
次のコードがそのように機能する理由を誰かが説明できるかどうか疑問に思っています:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
これにより、「nullnull」がコンソールに出力されます。
私は、操作 + が例外をスローするか、程度は低いが "c" が null になることを期待していました。
そのコードはにコンパイルされるため
String c = new StringBuilder().append(a).append(b).toString();
その結果をStringBuilder.append(a)
追加しString.valueof(a)
ます"null"
if a
isnull
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
Java がnull
文字列の連結中に参照を見つけると、それを string に変換します"null"
。正しい"nullnull"
結果も同様です。
すべてのオブジェクト Java 呼び出しの連結前
java.lang.String.valueOf(Object)
そのメソッドのソースコードを見ると、これが見つかります
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}