Rumah Java javaTutorial stringbuffer和stringbuilder的区别

stringbuffer和stringbuilder的区别

Jun 04, 2019 pm 01:19 PM
stringbuffer

无论是做Java或是Android,都避免不了遇到这个问题,其实开发过程中一般情况下是不会纠结,这个问题是面试必选经典题,今天有时间,就总结一下。

stringbuffer和stringbuilder的区别

StringBuffer、StringBuilder区别

StringBuffer与 StringBuilder中的方法和功能完全是等价的,只是StringBuffer中的方法大都采用了synchronized关键字进行修饰,因此是线程安全的,支持并发操作,适合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。(推荐学习:JAVA视频教程

接下来,我直接贴上测试过程和结果的代码,一目了然:

public class StringTest {
 
	public static String BASEINFO = "Mr.Y";
	public static final int COUNT = 2000000;
 
	/**
	* 执行一项String赋值测试
	*/
	public static void doStringTest() {
 
		String str = new String(BASEINFO);
		long starttime = System.currentTimeMillis();
		for (int i = 0; i < COUNT / 100; i++) {
			str = str + "miss";
		}
		long endtime = System.currentTimeMillis();
		System.out.println((endtime - starttime)
				+ " millis has costed when used String.");
	}
 
	/**
	* 执行一项StringBuffer赋值测试
	*/
	public static void doStringBufferTest() {
 
		StringBuffer sb = new StringBuffer(BASEINFO);
		long starttime = System.currentTimeMillis();
		for (int i = 0; i < COUNT; i++) {
			sb = sb.append("miss");
		}
		long endtime = System.currentTimeMillis();
		System.out.println((endtime - starttime)
				+ " millis has costed when used StringBuffer.");
	}
 
	/**
	* 执行一项StringBuilder赋值测试
	*/
	public static void doStringBuilderTest() {
 
		StringBuilder sb = new StringBuilder(BASEINFO);
		long starttime = System.currentTimeMillis();
		for (int i = 0; i < COUNT; i++) {
			sb = sb.append("miss");
		}
		long endtime = System.currentTimeMillis();
		System.out.println((endtime - starttime)
				+ " millis has costed when used StringBuilder.");
	}
 
	/**
	* 测试StringBuffer遍历赋值结果
	* 
	* @param mlist
	*/
	public static void doStringBufferListTest(List<String> mlist) {
		StringBuffer sb = new StringBuffer();
		long starttime = System.currentTimeMillis();
		for (String string : mlist) {
			sb.append(string);
		}
		long endtime = System.currentTimeMillis();
		System.out.println(sb.toString() + "buffer cost:"
				+ (endtime - starttime) + " millis");
	}
 
	/**
	* 测试StringBuilder迭代赋值结果
	* 
	* @param mlist
	*/
	public static void doStringBuilderListTest(List<String> mlist) {
		StringBuilder sb = new StringBuilder();
		long starttime = System.currentTimeMillis();
		for (Iterator<String> iterator = mlist.iterator(); iterator.hasNext();) {
			sb.append(iterator.next());
		}
 
		long endtime = System.currentTimeMillis();
		System.out.println(sb.toString() + "builder cost:"
				+ (endtime - starttime) + " millis");
	}
 
	public static void main(String[] args) {
		doStringTest();
		doStringBufferTest();
		doStringBuilderTest();
 
		List<String> list = new ArrayList<String>();
		list.add(" I ");
		list.add(" like ");
		list.add(" BeiJing ");
		list.add(" tian ");
		list.add(" an ");
		list.add(" men ");
		list.add(" . ");
 
		doStringBufferListTest(list);
		doStringBuilderListTest(list);
	}
 
}
Salin selepas log masuk

看一下执行结果:

2711 millis has costed when used String.
211 millis has costed when used StringBuffer.
141 millis has costed when used StringBuilder.
 I  like  BeiJing  tian  an  men  . buffer cost:1 millis
 I  like  BeiJing  tian  an  men  . builder cost:0 millis
Salin selepas log masuk

从上面的结果可以看出,不考虑多线程,采用String对象时(我把Count/100),执行时间比其他两个都要高,而采用StringBuffer对象和采用StringBuilder对象的差别也比较明显。由此可见,如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;如果要保证线程安全,自然是StringBuffer。

从后面List的测试结果可以看出,除了对多线程的支持不一样外,这两个类的使用方式和结果几乎没有任何差别。

更多JAVA相关技术文章,请访问JAVA开发教程栏目进行学习!

Atas ialah kandungan terperinci stringbuffer和stringbuilder的区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Di Jawa, bagaimana kita membandingkan StringBuilder dan StringBuffer? Di Jawa, bagaimana kita membandingkan StringBuilder dan StringBuffer? Aug 28, 2023 pm 03:57 PM

Objek StringBuffer secara amnya selamat digunakan dalam persekitaran berbilang benang, di mana berbilang benang boleh cuba mengakses objek StringBuffer yang sama secara serentak. StringBuilder ialah penggantian selamat benang untuk kelas StringBuffer yang berfungsi lebih pantas kerana ia tidak mempunyai kaedah > disegerakkan. Jika kita melakukan banyak operasi rentetan dalam satu utas, menggunakan kelas ini boleh meningkatkan prestasi. Contoh publicclassCompareBuilderwithBufferTest{ publicstaticvoidmain(String[]a

Tukar StringBuffer kepada rentetan menggunakan kaedah toString() kelas StringBuffer Tukar StringBuffer kepada rentetan menggunakan kaedah toString() kelas StringBuffer Jul 25, 2023 pm 06:45 PM

Tukar StringBuffer kepada rentetan menggunakan kaedah toString() kelas StringBuffer Dalam Java, kelas StringBuffer ialah kelas yang digunakan untuk mengendalikan rentetan boleh ubah Ia menyediakan banyak kaedah yang mudah untuk mengubah suai dan memanipulasi rentetan. Apabila kita perlu menukar objek StringBuffer kepada rentetan, kita boleh menggunakan kaedah toString() untuk mencapai ini. Kaedah toString() kelas StringBuffer mengembalikan a

Gunakan kaedah reverse() kelas StringBuffer untuk membalikkan rentetan Gunakan kaedah reverse() kelas StringBuffer untuk membalikkan rentetan Jul 24, 2023 pm 04:41 PM

Gunakan kaedah reverse() kelas StringBuffer untuk membalikkan rentetan Dalam pengaturcaraan, kita selalunya perlu melakukan beberapa operasi pada rentetan, seperti membalikkan rentetan. Di Java, anda boleh menggunakan kaedah reverse() kelas StringBuffer untuk mencapai pembalikan rentetan. Mari kita lihat penggunaan kaedah ini. Pertama, kita perlu mencipta objek StringBuffer dan lulus rentetan untuk diterbalikkan sebagai parameter kepada pembinanya seperti yang ditunjukkan di bawah

Bagaimana untuk menggunakan kelas String, StringBuffer dan StringBuilder di Java? Bagaimana untuk menggunakan kelas String, StringBuffer dan StringBuilder di Java? Apr 21, 2023 pm 07:22 PM

Konsep asas kelas String Kelas String ialah jenis data rujukan, bukan jenis data asas. Di Jawa, selagi ia disertakan dalam "" (petikan berganda), ia adalah objek String. Java menetapkan bahawa rentetan dalam petikan berganda tidak boleh diubah, yang bermaksud bahawa "abc" tidak boleh menjadi "abcd" atau "ab" dari lahir hingga mati. Dalam JDK, rentetan yang disertakan dalam petikan berganda disimpan dalam kolam pemalar rentetan dalam kawasan kaedah. (Oleh kerana dalam pembangunan sebenar, rentetan digunakan dengan sangat kerap, demi kecekapan pelaksanaan, rentetan diletakkan dalam kolam pemalar rentetan di kawasan kaedah.

Gunakan kaedah subrentetan() kelas StringBuffer untuk mendapatkan subrentetan sebahagian daripada rentetan. Gunakan kaedah subrentetan() kelas StringBuffer untuk mendapatkan subrentetan sebahagian daripada rentetan. Jul 24, 2023 pm 12:41 PM

Gunakan kaedah subrentetan() kelas StringBuffer untuk mendapatkan subrentetan sebahagian daripada rentetan Dalam pengaturcaraan Java, selalunya perlu untuk memproses dan mengendalikan rentetan. Kelas StringBuffer ialah kelas rentetan yang biasa digunakan yang menyediakan satu siri kaedah mudah untuk mengendalikan rentetan. Antaranya, kaedah substring() ialah kaedah yang sangat biasa digunakan, yang boleh digunakan untuk mendapatkan sebahagian daripada kandungan rentetan, iaitu subrentetan. Berikut akan memperkenalkan cara menggunakan kelas StringBuffer

Cara menggunakan StringBuffer dan StringBuilder di Java Cara menggunakan StringBuffer dan StringBuilder di Java Jun 02, 2023 pm 03:01 PM

Apabila mengubah suai rentetan, anda perlu menggunakan kelas StringBuffer dan StringBuilder. Tidak seperti kelas String, objek kelas StringBuffer dan StringBuilder boleh diubah suai beberapa kali tanpa mencipta objek baru yang tidak digunakan. StringBuffer: Apabila menggunakan kelas StringBuffer, objek StringBuffer itu sendiri akan dikendalikan setiap kali dan bukannya menjana objek baharu, jadi jika anda perlu mengubah suai rentetan, adalah disyorkan untuk menggunakan StringBuffer. StringBuilder: Kelas StringBuilder telah dicadangkan dalam Java5, dan ia adalah sama dengan S

Masukkan kandungan ke dalam rentetan dalam Java menggunakan kaedah insert() kelas StringBuffer Masukkan kandungan ke dalam rentetan dalam Java menggunakan kaedah insert() kelas StringBuffer Jul 24, 2023 am 11:34 AM

Gunakan kaedah insert() kelas StringBuffer untuk memasukkan kandungan ke dalam rentetan dalam Java Dalam pengaturcaraan Java, kelas StringBuffer ialah kelas manipulasi rentetan yang sangat biasa digunakan. Ia menyediakan pelbagai kaedah untuk mengubah suai rentetan, antaranya kaedah insert() ialah kaedah yang sangat mudah untuk memasukkan kandungan ke dalam rentetan. Kaedah insert() digunakan untuk memasukkan aksara, tatasusunan aksara, rentetan atau rentetan yang ditukar daripada jenis data lain pada kedudukan yang ditentukan.

Balikkan susunan aksara dalam rentetan menggunakan kaedah reverse() kelas StringBuffer Balikkan susunan aksara dalam rentetan menggunakan kaedah reverse() kelas StringBuffer Jul 26, 2023 pm 10:10 PM

Balikkan susunan aksara dalam rentetan menggunakan kaedah reverse() kelas StringBuffer Di Jawa, terdapat pelbagai cara untuk membalikkan susunan aksara dalam rentetan. Salah satu kaedah yang mudah dan cekap ialah menggunakan kaedah reverse() kelas StringBuffer. Artikel ini akan memperkenalkan cara menggunakan kaedah ini untuk membalikkan rentetan dan memberikan contoh kod yang berkaitan. Kelas StringBuffer ialah kelas boleh ubah dalam Java yang digunakan untuk memproses rentetan. Tidak seperti kelas String,

See all articles