次のコードは、それがないように動作しない理由誰かが説明できる場合、私はちょうど思ったんだけど:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
これは、コンソールに「nullnull」を出力します。
私は、操作+が例外をスローしたり、程度は低いが、 "c"がnullになると予想していました。 Javaは文字列連結中null
参照を見つける場合
次のコードは、それがないように動作しない理由誰かが説明できる場合、私はちょうど思ったんだけど:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
これは、コンソールに「nullnull」を出力します。
私は、操作+が例外をスローしたり、程度は低いが、 "c"がnullになると予想していました。 Javaは文字列連結中null
参照を見つける場合
見つけるために連結する前に、「文字列変換を、」連結演算子で必要とされます、文字列表現が必要なときは常に、NULL値を4文字のnull
にマップするように指示しています。 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
そのコードが
String c = new StringBuilder().append(a).append(b).toString();
とStringBuilder.append(a)
にコンパイルするためには、String.valueof(a)
which is "null"
if a
is null
この特定のケースでは、あなたは正しいです。しかし、より一般的な空文字列の印刷の場合、次のようになります。http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html#print%28java.lang.String%29&http: /docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.11 –
私の場合は 'String c = new StringBuilder(String .valueOf(a))。append(b).toString(); '。本当の理由は、 'String.valueOf(Object)'の実装です。 – dash1e
@ dash1eそれは実装に依存します。実際には 'append(null)'にも "null"を付加する必要があります –
の結果を追加した文字列"null"
に変換します。だから"nullnull"
が正しい結果です。
すべてのオブジェクトのJavaコール
java.lang.String.valueOf(Object)
、あなたがそのメソッドのソースコードを見れば、あなたがこの
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
返信いただきありがとうございます。私は疑問を解決するために投票しました。なぜなら、重複が見つかったからです。それ以外の場合は、私が受け入れる答えになります – Tiago