2017-11-23 32 views
2

質問があります。たとえば :私は2つの追記方法のチェーンを作った最後の行で今Java StringBuilderメソッドチェーンを追加する

StringBuilder sb = new StringBuilder(); 
sb.append("Teacher,"); 
String s = sb.append(" Good").append("Morning!").toString(); 

。私は各メソッドがメモリ内の文字列にアドレスを返すことを知っています(私は正しいのですか?)したがって、最初のsb.appendには、sbが指すアドレスに追加されています。そして最初のsb.appendがランタイムで最初に実行されていますが、次に.appendの場合はどうなりますか?次の.appendは、最初の追加メソッドが返すアドレスまたは間違っているアドレスを使用していますか? これは私が何を意味するかです:

最初の追加 - >sb.append(" Good"); 第二には、returnedAddr.append("Morning!");

を追加し、それはこのように動作していますか?

+0

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(java.lang.Stringと等価です)なぜそのような参照を返します。 – LazerBanana

答えて

1

append()オンStringBuilderは便宜としてthisを返します。

String s = new StringBuilder().append("Good").append(" Morning!").toString(); 

それに鎖に別の.append()呼び出しを可能にするメソッドが呼び出された同じStringBuilderインスタンスへの参照を返す

StringBuilder sb = new StringBuilder(); 
sb.append("Good"); 
sb.append(" Morning!"); 
String s = sb.toString(); 
2

sb.append(" Good")と等価です。

StringBuilder sb = new StringBuilder(); 
sb.append("Teacher,"); 
String s = sb.append(" Good").append("Morning!").toString(); 

StringBuilder sb = new StringBuilder(); 
sb.append("Teacher,"); 
sb.append(" Good"); 
sb.append("Morning!"); 
String s = sb.toString(); 
+2

と同等ですが、スピードが異なり、JVMがこのコードを認識する方法も異なります。 https://stackoverflow.com/questions/44334233/why-is-the-stringbuilder-chaining-pattern-sb-appendx-appendy-faster-than-reg – Eugene

関連する問題