2012-04-12 26 views
1

可能性の重複:
Concatenating null strings in JavaJavaの文字列の連結 - ヌル

次のコードは、それがないように動作しない理由誰かが説明できる場合、私はちょうど思ったんだけど:

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

これは、コンソールに「nullnull」を出力します。

私は、操作+が例外をスローしたり、程度は低いが、 "c"がnullになると予想していました。 Javaは文字列連結中null参照を見つける場合

答えて

2

見つけるために連結する前に、「文字列変換を、」連結演算子で必要とされます、文字列表現が必要なときは常に、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

+0

返信いただきありがとうございます。私は疑問を解決するために投票しました。なぜなら、重複が見つかったからです。それ以外の場合は、私が受け入れる答えになります – Tiago

9

そのコードが

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

StringBuilder.append(a)にコンパイルするためには、String.valueof(a) which is "null" if a is null

+0

この特定のケースでは、あなたは正しいです。しかし、より一般的な空文字列の印刷の場合、次のようになります。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 –

+0

私の場合は 'String c = new StringBuilder(String .valueOf(a))。append(b).toString(); '。本当の理由は、 'String.valueOf(Object)'の実装です。 – dash1e

+0

@ dash1eそれは実装に依存します。実際には 'append(null)'にも "null"を付加する必要があります –

0

の結果を追加した文字列"null"に変換します。だから"nullnull"が正しい結果です。

すべてのオブジェクトのJavaコール

java.lang.String.valueOf(Object) 

、あなたがそのメソッドのソースコードを見れば、あなたがこの

public static String valueOf(Object obj) { 
    return (obj == null) ? "null" : obj.toString(); 
}