String ,StringBuilder,StringBuffer
一.String類使用字符數(shù)組保存字符串,數(shù)組有final修飾,不可變.線程安全
String a="hello";String b=new String("hello");
第一種在棧內(nèi)存定義了一個(gè)a對(duì)象的引用,指向堆內(nèi)存的值"hello"的內(nèi)存地址
第二種先在棧內(nèi)存創(chuàng)建一個(gè)"hello"對(duì)象,new String又產(chǎn)生了另外一個(gè)對(duì)象.第一個(gè)對(duì)象無人引用
上圖的解釋:String在Java中使用了共享設(shè)計(jì),在Java形成一個(gè)對(duì)象池,這個(gè)對(duì)象池可以保存多個(gè)對(duì)象,如果新實(shí)例化的對(duì)象已經(jīng)在對(duì)象池中存在,就不在重復(fù)定義,直接從 對(duì)象池中取出使用。
二.StringBuilder類繼承AbstractStringBuilder,底層也是字符數(shù)組保存字符串,可變.線程不安全
//無參構(gòu)造,默認(rèn)長(zhǎng)度16的字符數(shù)組
public StringBuilder() {
??????? super(16);
??? }
//帶參數(shù)的構(gòu)造函數(shù)
?public StringBuilder(String str) {
???? ??? super(str.length() + 16);
???? ??? append(str);
??? }
//沒有實(shí)現(xiàn)同步
?public StringBuilder append(String str) {
?????? ? super.append(str);
????? ?? return this;
?? ? }
三.StringBuffer類繼承AbstractStringBuffer,底層也是字符數(shù)組保存字符串,可變.線程安全
//無參構(gòu)造,默認(rèn)長(zhǎng)度16的字符數(shù)組
public StringBuffer() {
??????? super(16);
??? }
//帶參數(shù)的構(gòu)造函數(shù)
?public StringBuffer(String str) {
???? ??? super(str.length() + 16);
???? ??? append(str);
??? }
//和StringBuilder的區(qū)別就是同步
??? public synchronized StringBuffer append(String str) {
??????? super.append(str);
???? ??? return this;
? ?? }
四.總結(jié):
1.如果要操作少量的數(shù)據(jù)用 = String
?????????? ?? 2.單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
????????????? 3.多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer
?
轉(zhuǎn)載于:https://www.cnblogs.com/2nao/p/6507571.html
總結(jié)
以上是生活随笔為你收集整理的String ,StringBuilder,StringBuffer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hello,PyQt5!
- 下一篇: 把字符串3,1,2,4以,分割拆分为数组