java - 为什么用String替换StringBuilder

 心胸宽大的榛子lcf 发布于 2022-10-25 17:04

今天在用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 个回答
  • 这是编译器的优化,如果你是多行也就是多个";"作为连接时候就不会优化了

    2022-10-26 23:25 回答
  • StringBuilder对象的内容可以修改,在内存使用上要优于String类
    而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。

    所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuilder要更加适合一些。

    另外,编辑器的检查程序也只是一种规范,不一定就是最好的。

    2022-10-26 23:25 回答
  • 编译器内部优化了连接符,如果是常量,通过常量池的方式直接拼接

    如果非常量,大多数情况会在内部类似这样优化,new StringBuilder().append(),最后会调用toString(),至少jdk1.7上是这样的

    2022-10-26 23:25 回答
  • 全是常量的拼接编译器会给你优化,你可以查看替换后的文件编译后class文件的字节码,应该是优于你写的

    想想 scort说的应该是有道理的,编译器应该在编译阶段把string常量的+连接进行了优化,就不需要StringBuilder了

    2022-10-26 23:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有