Rumah Java JavaAsas string、stringbuffer和stringbuilder的区别是什么?

string、stringbuffer和stringbuilder的区别是什么?

Nov 20, 2020 am 09:54 AM
java string stringbuffer stringbuilder

区别:String类是不可变类,当一个String对象被创建,则包含在对象中的字符序列是不可改变的,直至对象被销毁;StringBuffer对象代表可变字符串对象,且线程安全;StringBuilder类代表可变字符串对象,且非线程安全。

string、stringbuffer和stringbuilder的区别是什么?

String、StringBuffer和StringBuilder的区别:

String

  String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

  这个是String类的解释,之前小咸儿看到这个情况,不能理解上述的解释,如下

String a = "123";
a = "456";
// 打印出来的a为456
System.out.println(a)

  看到这里,小咸儿不明白了,这不是明明已经对他进行修改了吗?为什么还说他是一个不可变类呢?

  经过小咸儿和小伙伴们的学习,明白String类不可变在哪里体现出来的,接下来就看一张上述a对象的内存存储空间图
在这里插入图片描述

  可以看出来,再次给a赋值时,并不是对原来堆中实例对象进行重新赋值,而是生成一个新的实例对象,并且指向“456”这个字符串,a则指向最新生成的实例对象,之前的实例对象仍然存在,如果没有被再次引用,则会被垃圾回收。

StringBuffer

  StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。

StringBuffer b = new StringBuffer("123");
b.append("456");
// b打印结果为:123456
System.out.println(b);

  在看一下b对象的内存空间图:
在这里插入图片描述

  所以说StringBuffer对象是一个字符序列可变的字符串,它没有重新生成一个对象,而且在原来的对象中可以连接新的字符串。

StringBuilder

  StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。

StringBuffer是如何实现线程安全的呢?

StringBuffer类中实现的方法:

在这里插入图片描述

StringBuilder类中实现的方法:

在这里插入图片描述

  由此可见,StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。

Java9的改进

  Java9改进了字符串(包括String、StringBuffer、StringBuilder)的实现。在Java9以前字符串采用char[]数组来保存字符,因此字符串的每个字符占2字节;而Java9的字符串采用byte[]数组再加一个encoding-flag字段来保存字符,因此字符串的每个字符只占1字节。所以Java9的字符串更加节省空间,字符串的功能方法也没有受到影响。

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci string、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

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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.

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!

Artikel Panas

Rimworld Odyssey Cara Ikan
1 bulan yang lalu By Jack chen
Apakah had transaksi untuk pengguna asing di Alipay?
1 bulan yang lalu By 下次还敢
Bolehkah saya mempunyai dua akaun Alipay?
4 minggu yang lalu By 下次还敢

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)

Topik panas

Tutorial PHP
1505
276
Kekunci kelantangan pada papan kekunci tidak berfungsi Kekunci kelantangan pada papan kekunci tidak berfungsi Aug 05, 2025 pm 01:54 PM

First,checkiftheFnkeysettingisinterferingbytryingboththevolumekeyaloneandFn volumekey,thentoggleFnLockwithFn Escifavailable.2.EnterBIOS/UEFIduringbootandenablefunctionkeysordisableHotkeyModetoensurevolumekeysarerecognized.3.Updateorreinstallaudiodriv

Penonton pdf tepi tidak berfungsi Penonton pdf tepi tidak berfungsi Aug 07, 2025 pm 04:36 PM

Testthepdfinanotherapptodetermineiftheisseiswiththefileoredge.2.enableTetHEBuilt-Inpdfviewerbyturningoff "AlwaysopenpdffileseXternally" dan "muat turun" inedgesettings.3.clearbrowsdataincludingcookiesandcookiescookiesandcookiescookiesandcookiescookieshincookieshincookiescookiescookiescookiescookiescookiescookiescookiescookiescokiescookiescookiescookiescookiescookiescooker

Kaedah yang dikira vs kaedah di Vue Kaedah yang dikira vs kaedah di Vue Aug 05, 2025 am 05:21 AM

Dikira mempunyai cache, dan pelbagai akses tidak dikira semula apabila pergantungan tetap tidak berubah, sementara kaedah dilaksanakan setiap kali mereka dipanggil; 2. Komputed sesuai untuk pengiraan berdasarkan data responsif. Kaedah sesuai untuk senario di mana parameter diperlukan atau panggilan kerap tetapi hasilnya tidak bergantung kepada data responsif; 3. Kompted menyokong getters dan setters, yang dapat merealisasikan penyegerakan data dua hala, tetapi kaedah tidak disokong; 4. Ringkasan: Gunakan yang dikira terlebih dahulu untuk meningkatkan prestasi, dan menggunakan kaedah semasa lulus parameter, melakukan operasi atau mengelakkan cache, mengikuti prinsip "jika anda boleh menggunakan dikira, anda tidak menggunakan kaedah".

Apache Prestasi Menala Amalan Terbaik Apache Prestasi Menala Amalan Terbaik Aug 05, 2025 am 06:59 AM

Useeventmpmpmforhigh-concurrencyworkloads, terutamanya dengan-fpm, orpreforkonlyifrequiredbynon-thread-safemodules.2.enableepaliveWithMaxkeepalivereStoSetto100andkeepaliveThonSoShoShoShoShoSoShoShoSoShoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoS.

pergi dengan contoh menjalankan subprocess pergi dengan contoh menjalankan subprocess Aug 06, 2025 am 09:05 AM

Jalankan proses kanak -kanak menggunakan pakej OS/EXEC, buat arahan melalui exec.command tetapi tidak melaksanakannya dengan segera; 2. Jalankan arahan dengan .Output () dan tangkap stdout. Jika kod keluar bukan sifar, kembalikan exec.exiterror; 3. Gunakan .start () untuk memulakan proses tanpa menyekat, menggabungkan dengan .stDoutPipe () untuk menstrimkan output dalam masa nyata; 4. Masukkan data ke dalam proses melalui .StDinPipe (), dan selepas menulis, anda perlu menutup saluran paip dan panggilan .Wait () untuk menunggu akhir; 5. EXEC.EXITError mesti diproses untuk mendapatkan kod keluar dan stderr perintah gagal untuk mengelakkan proses zombie.

Bolehkah anda menerangkan kaedah yang berlebihan dan kaedah yang mengatasi Java? Bolehkah anda menerangkan kaedah yang berlebihan dan kaedah yang mengatasi Java? Aug 06, 2025 am 07:41 AM

Kaedah overloading dan kaedah beban adalah dua mekanisme untuk melaksanakan polimorfisme di Jawa. 1. Kaedah kelebihan berlaku dalam kelas yang sama. Ia memerlukan nama kaedah yang sama tetapi senarai parameter yang berbeza (nombor, jenis atau urutan parameter), yang dimiliki oleh polimorfisme kompilasi masa. Jenis pulangan boleh berbeza tetapi tidak boleh dibebankan oleh jenis pulangan sahaja. Terdapat pengubah akses yang berbeza dan pengisytiharan pengecualian; 2. Kaedah penulisan semula berlaku dalam hubungan warisan. Subclass menyediakan pelaksanaan khusus kaedah kelas induk yang sedia ada. Ia memerlukan tandatangan kaedah yang sama dan jenis pulangan serasi. Pengubah akses tidak boleh lebih ketat. Ia tergolong dalam polimorfisme runtime. Kaedah contoh mesti digunakan dan penulisan semula yang betul dapat dipastikan melalui anotasi @Override. Bersama -sama, kedua -dua meningkatkan kebolehbacaan kod dan skalabiliti.

Mengoptimumkan gelung foreach bersarang untuk struktur data yang kompleks Mengoptimumkan gelung foreach bersarang untuk struktur data yang kompleks Aug 06, 2025 pm 12:53 PM

Untuk mengoptimumkan gelung yang bersarang, lelaran yang berlebihan harus dielakkan terlebih dahulu, dan kerumitan masa dapat dikurangkan dari O (n × m) hingga O (n m); Kedua, jika struktur tidak benar -benar hierarki, data harus diratakan menggunakan kaedah seperti selectmany; Ketiga, melompat terlebih dahulu atau melangkau pemprosesan yang tidak perlu melalui penghakiman bersyarat; Keempat, pilih struktur data yang sesuai seperti set kamus atau hash untuk meningkatkan kecekapan carian; Kelima, paralelisasi boleh digunakan dengan berhati-hati apabila operasi bebas dan memakan masa; Keenam, ekstrak logik kompleks ke dalam kaedah atau pertanyaan bebas untuk meningkatkan kebolehbacaan dan kebolehkerjaan. Inti pengoptimuman adalah untuk mengurangkan kerumitan, mengatur data yang munasabah, dan sentiasa menilai keperluan bersarang, akhirnya mencapai kod yang cekap, jelas dan boleh diperluas.

Strategi pengendalian pengecualian java yang berkesan Strategi pengendalian pengecualian java yang berkesan Aug 05, 2025 pm 02:44 PM

UseSpecifexceptionsInsteadofgenericonestohandledifferenterrorconditionSappredyAndArdaskingUnintendedErrors.2.NeverIgnorecaughtExceptions; selal-logorre-throwthem, anddocumentintentionAlignoresWithComments.3.VenateToSthailhailhiltherth

See all articles