亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

StringBuilder是在原有的地址里去改變原來的字符串嗎?

解析里面說StringBuilder 不會額外創建一個對象,比如我先StringBuilder ?str1 = new?StringBuilder ("JAVA"); ? 再StringBuilder ?str2 ?=new?StringBuilder(str1 + 'A');

那么按照解析里說的,不會額外產生臨時的變量,那是直接在str1的地址上修改成了JAVAA? ?我在eclipse里實驗了一下,兩個字符串的地址也不一樣,也就是說,還是新開辟了一個地址,新產生了一個變量呀。有什么區別

正在回答

1 回答

凡是new出來的都是對象。你new了2次,當然會產生新的對象(開辟新的地址)。我們說字符串具有不變性,指的是字符串一旦聲明不可改變(存儲在字符串常量池中)。例如:

String?str1?=?'abc';
str1?+=?'123';

實際上以上的代碼會在常量池中產生2個字符串:abc和abc123,其中前者因為沒有任何指向會在適當的時候被gc回收;而StringBuilder將字符串存放在緩沖區(提到緩沖區我們很自然可以想到可以提高效率)。整個的字符串操作都是在緩沖區中進行,最后調用toString()方法返回字符串(期間并沒有產生臨時字符串)

1 回復 有任何疑惑可以回復我~
#1

CyberLiu 提問者

非常感謝!
2015-09-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

StringBuilder是在原有的地址里去改變原來的字符串嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號