StringBufferをとStringBuilderの機能特性との違い(基本版)

ディレクトリ

機能

機能

違い


ときに文字列が変化し、StringBufferのStringBuilderクラス(データを格納するための容器)の使用を必要とします。

そして、Stringクラスは異なり、StringBufferのStringBuilderクラスのオブジェクトは、何度も変更することができ、新たな未使用のオブジェクトを生成しません。

StringBufferのStringBuilderのは、速度の利点と比較するので、そのほとんどの場合、我々は、StringBuilderクラスを使用することをお勧めします。

 

機能

  1. 可変長
  2. 異なるタイプのデータが格納されていてもよいです
  3. 最終的に使用して文字列に変わります
  4. 文字列を変更することができます

 

機能

public class TestStringBuilder {
	public static void main(String[] args) {
		String str;
		StringBuilder sBuilder=new StringBuilder();//可变字符序列:相比String 无final修饰
		StringBuffer sbBuffer=new StringBuffer("abcdefg");
		//StringBuilder线程不安全,效率高(一般使用它),StringBuffer线程安全,效率低
		 
		System.out.println(Integer.toHexString(sbBuffer.hashCode()));
		System.out.println(sbBuffer);
		
		System.out.println("********");
		//更改字符串的内容
		sbBuffer.setCharAt(2, 'M');
		System.out.println(Integer.toHexString(sbBuffer.hashCode()));//hashcode一样,说明对象没变,
		System.out.println(sbBuffer);
	}

}
 
public class TestStringBuilder2 {
	public static void main(String[] args) {
		StringBuilder sbStringBuilder=new StringBuilder();
		
		for(int i=0;i<26;i++) {
			sbStringBuilder.append((char)('a'+i));//append扩展,可以链式调用
		}
		
		System.out.println(sbStringBuilder);
	
		//reverse 倒序
		sbStringBuilder.reverse();
		System.out.println(sbStringBuilder);
		
		//setCharAt 替换
		sbStringBuilder.setCharAt(3, '可');
		System.out.println(sbStringBuilder);
		
		//insert 插入
		sbStringBuilder.insert(4, '变').insert(5, '的');
		//insert最后会调用return this,返回自己,所以可以链式调用。
		System.out.println(sbStringBuilder);
		
		//delete 删除,和insert一样,可以链式调用
		sbStringBuilder.delete(3, 5).delete(17, 19);
		System.out.println(sbStringBuilder);
	}
}
//{
//	和String类含义类似的方法
//	public int indexOf(String str)
//	public int indexOf(String str,int fromindex)
//	public String substring (int start)
//	public String subString (int start,int end)
//	public int length()
//	char charAt(int index)
//}
/*
 * 测试String和StringBuilder的使用陷阱
 */
public class TestStringBuilder3 {
	public static void main(String[] args) {
		
		//使用String进行字符串的拼接 (!*不能出现这样的代码*!)
		String string="";
		for(int i=0;i<5000;i++) {
			string=string+i;  //相当于产生了10000个对象(i代表的数字为了和string相加,会变成一个字符串对象以和string联结)
		}
		
		//要用StringBuilder的append
		StringBuilder stringBuilder=new StringBuilder();
		for(int i=0;i<5000;i++) {
			stringBuilder.append(i);
		}
	}

}

違い

StringBuilderクラスは、Java 5、メソッドはスレッドセーフではありません(アクセスを同期することはできません)であることを、それとのStringBuilder StringBufferの間の最大の違いに提示されています。

StringBufferのは、基本的には親のメソッドを呼び出し、同期の変更に追加され、それがスレッドセーフである;しかし、頻繁にロックと解除するロックがパフォーマンスの低下につながる、実行速度はStringBufferのより遅いです。
StringBuilderのすべてのメソッドは、スレッドセーフので、synchronizedキーワードで改変されていないが、プロセスがロックガイドを解放するため、実行速度に速いのStringBufferよりも、ロックされていません。

公開された38元の記事 ウォンの賞賛6 ビュー1925

おすすめ

転載: blog.csdn.net/weixin_43827227/article/details/97144694