java - 为什么用String替换StringBuilder
黄舟
黄舟 2017-04-18 10:25:48
0
4
683

今天在用android studio 2.0的时候碰到个奇怪问题:
我用StringBuilder生成一个字符串,但是用studio自带的代码检测程序优化代码时,缺把StringBuilder改成了String型“+”连接。
这是什么原因呢?不是StringBuilder应该比“+”性能更好吗?
这是自动替换后的

String sb = "CREATE TABLE IF NOT EXISTS " +
                appContext.getString(R.string.tbl_name) +
                "(_id INTEGER PRIMARY KEY AUTOINCREMENT" +
                ",account VARCHAR" +
                ",psw VARCHAR" +
                ",memo TEXT)";

这是我之前写的

StringBuilder sb = new Stringbuilder();
sb.append(xxxx)
.
.
.
db.execSql(sb.toString());
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(4)
PHPzhong

全是常數的拼接編譯器會給你最佳化,你可以查看替換後的檔案編譯後class檔案的字節碼,應該是優於你寫的

想想 scort說的應該是有道理的,編譯器應該在編譯階段把string常數的+連接進行了優化,就不需要StringBuilder了

阿神

編譯器內部最佳化了連接符,如果是常數,透過常數池的方式直接拼接

如果非常量,大多數情況會在內部類似這樣優化,new StringBuilder().append(),最後會呼叫toString(),至少jdk1.7上是這樣的

刘奇

StringBuilder物件的內容可以修改,在記憶體使用上要優於String類別
而String物件一旦產生後就不可以被修改,重新賦值其實是兩個物件。

所以在實際使用時,如果經常需要對一個字串進行修改,例如插入、刪除等操作,使用StringBuilder要更適合一些。

另外,編輯器的檢查程序也只是一種規範,不一定就是最好的。

Peter_Zhu

這是編譯器的最佳化,如果你是多行也就是多個";"作為連接時候就不會優化了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板