今天在用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());
Memikirkannya, apa yang dikatakan oleh scort sepatutnya masuk akal Pengkompil harus mengoptimumkan sambungan + pemalar rentetan semasa fasa penyusunan, jadi tidak ada keperluan untuk StringBuilder
Pengkompil secara dalaman mengoptimumkan penyambung Jika ia adalah pemalar, ia disambung terus melalui kolam pemalar
Jika ia tidak tetap, dalam kebanyakan kes ia akan dioptimumkan secara dalaman seperti ini, StringBuilder().append() baharu dan akhirnya toString() akan dipanggil, sekurang-kurangnya pada jdk1.7
Kandungan objek StringBuilder boleh diubah suai, yang lebih baik daripada kelas String dari segi penggunaan memori
Objek String tidak boleh diubah suai setelah ia dijana sebenarnya dua objek.
Jadi dalam penggunaan sebenar, jika anda sering perlu mengubah suai rentetan, seperti sisipan, pemadaman, dan lain-lain, adalah lebih sesuai untuk menggunakan StringBuilder.
Selain itu, penyemak editor hanyalah spesifikasi, tidak semestinya yang terbaik.
Ini ialah pengoptimuman pengkompil Jika anda mempunyai berbilang baris, iaitu berbilang ";" sebagai sambungan, ia tidak akan dioptimumkan