RubyとJavaの文字列連結の違いその2

RubyでStringは変更可能(mutable)なクラス。


「+」メソッドは非破壊的なメソッド、呼び出すと毎回
新規オブジェクトを生成し、それに変更を適用する。
「<<(or concat)」メソッドは破壊的なメソッド、レシーバ
を直接変更する。
(「<<」と「concat」メソッドの違いは記述の短さ、
「<<」は2文字、「concat」は6文字+α、「<<」推奨)


文字列連結は「+」ではなく「<<」メソッドで行う。
但し、短い文字列では式展開で文字列連結するほうが「<<」
メソッドでの連結よりもパフォーマンスが良い。


JavaでStringは変更不能(immutable)なクラス。
そのため、別に変更可能(mutable)なクラスが用意されている。
それがStringBuilder(or StringBuffer)。


文字列連結はStringではなくStringBuilder(or StringBuffer)で行う。


StringBuilderとStringBufferの違いはスレッドの同期処理、
StringBufferはスレッド同期を行うのでStringBuilder
より処理速度が遅い。
シングルスレッド上で文字列の変更が完結する場合、
スレッドの同期処理が不要なので、StringBuilderを使う。
スレッドの同期処理が必要であってもStringBuilderを使い、
必要最低限の同期処理を自前で記述するほうが良い。


RubyのStringにスレッドの同期処理に対応したメソッドはない、
必要であれば自前で実装する。

その3へ