2011-07-14 4 views
0

を実行するにはどうすれば文字列連結連結演算子と連結()は任意のタスク

String myData = "a"+"b";   // using concatenation operator 
String myData = "a".concat("b"); // using concat() of String 

ためのいずれかの連結演算子(+)又はconcat()方法を使用することができるが、直接的に)(私は連結を使用することができない整数で文字列をconcateします。だから私は、次のロジック

String myData = "a"+5; 
String myData = "a".concat(String.valueOf(5)); 

のいずれかを使用する必要があります。しかし、私は質問の下にarised私がしている連結演算子と連結

String myData = "a"+null;    //output = anull 
    String myData = "a".concat(String.valueOf(5)); // output = NullPointerException 
or 
    String myData = "a".concat(null); // output = NullPointerException 

を使用したいとき、私は次の行にある奇妙ないくつかのことを発見した私気に

1) How concat() method and concatenation operator works what is the difference in their logic of performing any task? 
2) Can we really concat a null using (+) if so why concat() method cannot achieve the same 

おかげ

答えて

1

1)(Stringを生成する)演算子は、常に中間のStringBuilder(または、以前のプラットフォームをターゲットとしている場合はStringBuffer)(1.5(リリース済み7(7)年前))を通過します。 2つまたはおそらく3つを連結するために、Stringconcatは、一般に、中間体の欠如のためにより速くなる。しかし、より長い連結のためには、中間割り当てが少なくなるため、+が勝つでしょう。

2)nullは、一般的にエラーを示しています(おそらく設計上の誤り)。一般的に、エラーはできるだけ早く報告する必要があります。String.concatがあります。ただし、またはStringBuilderの連結は、デバッグ文字列を生成するためによく使用されるため、nullが許容され、デバッグに適した結果が生成されます(UIではなく)。

+0

ご返信ありがとうございますが、私の疑いは少し異なります。これらの2つの作業の内部プロセスは何ですか。なぜなら、2つのオペランドについて考えると、最初のオプションは結果を与え、2番目のオプションは結果ではないからです。そうであれば、最初のものが結果を生み出すことができます。 –

+1

'String myData =" a "+ null'はjavacによって' StringBuilder $ buff = new StringBuilder();のように変換されます。 $ buff.append( "a"); $ buff.append(null); String myData = $ buff.toString(); '。 'StringBuilder.append'の中で(そして、JDKの中の' src.zip'でソースを調べることができます)、 'null'をチェックし、見つかった場合は' 'null ''という文字列を追加します。 –

0

セマンティクスに違いはありませんが、あなたの例は間違っています。

String myData = "a"+null;    //output = anull 

String myData = "a".concat(String.valueOf((Object)null)); // output = anull 

これはコンパイルして動作します。 +は、すべてのオペランドに対してString.valueOf()が呼び出されたかのように動作します。

関連する問題