Java – StringとStringBuffer
この記事では、
String`オブジェクトと
StringBuffer`オブジェクトに対する同様の操作の時間差を示します。
-
`String`は不変クラスであり、それぞれ新しいオブジェクトをインスタンス化します
その上で操作が実行される時間
。 `StringBuffer`は可変クラスであり、オブジェクトのオーバーヘッド
操作中のインスタンス化は削除されます。したがって、操作に要する時間は `String`に比べて少なくなります
1. StringとStringBuffer
String`クラスと
StringBuffer`クラスの実行時間を10000文字を加算して比較しましょう。
TimeTester.java
package com.techfou; public class TimeTester{ public static void main(String[]args) { String aString = ""; long before = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { aString = aString + "x"; } long after = (System.currentTimeMillis()); System.out.println("Execution Time for String: " + (after - before)); before = System.currentTimeMillis(); StringBuffer aStringBuffer = new StringBuffer(); for (int i = 0; i < 10000; i++) { aStringBuffer.append("x"); } after = (System.currentTimeMillis()); System.out.println("Execution Time for StringBuffer: " + (after - before)); } }
上記のコードを実行すると、以下の出力が得られます。出力は、プロセッサの速度によって異なります。はっきりとわかるように、10000文字列をStringオブジェクトに追加するには128ミリ秒かかります。
これと比較すると、StringBufferは11ミリ秒かかるだけです。
Execution Time for String: 128 Execution Time for StringBuffer: 11
これは、
StringBuffer`が
String`よりも速いということを証明します。しかし、 `String`の不変プロパティはスレッドセーフです。
2.結論
結論として、クラスが提供する関数だけでなく、構文にも精通しているならば、
StringBuffer`は
String`より優れた選択肢であると言えるでしょう。より速く、変更可能です。 `String`は、読み取り専用オブジェクトを必要とする状況や文字列の操作が必要な状況での使用に限定されています。
参考文献
-
%E2%80%9Dhttp://www.javaworld.com/article/2076072/build-ci-sdlc/stringbuffer-versus-string.html%E2%80%9D[なぜ
StringBufferはStringより高速です]。
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
[String
Javadocs]。
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
[StringBuffer
Javadocs]。
https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html
[Definition
as java docs]