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