JAvaのStringとStringBuffer


両者の区別
      JAvaのStringはfinalクラスで継承できません.Stringは可変オブジェクトであり、作成すると変更できません.Stringオブジェクトが既に存在する場合は、変更するには新しいオブジェクトを作成し、新しい値を保存します.
     例:String s 1=new String() 
                String s2 = new String();
                s1 += s2;//この操作は、まず新しい記憶領域を開き、s 1とs 2を結合し、このアドレスをs 1参照に渡す.ではs 1はもともと空間が自動的に回収されていました.
     JAvaのStringBufferは可変オブジェクトで、変更するときは元のアドレスの後ろで直接変更します.StringBufferは、コンストラクション関数によってのみ作成できます.
               StringBuffer str = new StringBuffer();               str = "lsj";//エラー、この方法で値を割り当てることはできません
オブジェクトが作成すると、メモリにメモリ領域が割り当てられ、最初にnullが保存され、StringBufferに値を割り当てるときにそのappendメソッドを使用することができる.                str.append("seu");
                StringBuffer s1 = new StringBuffer(); 
                String s2 = new StringBuffer();
                s1.append(s2);//この操作はs 1の空間の後ろで直接操作され、追加の空間を開く必要はない.
次の実験をします
public class testString
{
	public static void main(String args[]){
		String str = new String();
        long start = System.currentTimeMillis();
		final int times = 1000;
		for(int i=0; i

所要時間:15 ms
同じコードはStringBufferで作られています.
public class testString
{
	public static void main(String args[]){
		StringBuffer str = new StringBuffer();
        long start = System.currentTimeMillis();
		final int times = 1000;
		for(int i=0; i

時間はほぼ0.
本当の原因
    実は、私たちは
                String s1 = new String(); 
                String s2 = new String();
                s1 += s2; 
    コードが接続操作をするとき、システムは実は次のコードに従っています.
               StringBuffer tempStr = new StringBuffer(s1);
               tempStr.append(s2);
               s1 = tempStr.toString();
     これにより、Stringの接続操作はStringBufferよりもいくつかの追加操作が多くなり、もちろん効率的に割引されます.またStringオブジェクトは可変オブジェクトであるため、Stingを操作するたびに新しいオブジェクトを再構築して新しい値を保存し、元のオブジェクトが役に立たず、ゴミ回収される.これも性能に影響を与える.
     まとめ:プログラムで文字列を頻繁に修正する必要がある場合は.StringBufferを使用するとパフォーマンスが向上します.
参照先:http://blog.csdn.net/yirentianran/article/details/2871417