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

今天在用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

모두 상수인 스플라이싱 컴파일러가 이를 최적화해 줄 것입니다. 대체된 파일의 컴파일된 클래스 파일의 바이트코드를 확인할 수 있습니다.

생각해 보면 scort가 말한 내용이 이해가 됩니다. 컴파일러는 컴파일 단계에서 문자열 상수의 + 연결을 최적화해야 하므로 StringBuilder가 필요하지 않습니다.

    阿神

    컴파일러는 내부적으로 커넥터를 최적화합니다. 상수인 경우 상수 풀을 통해 직접 연결됩니다.

    상수가 아닌 경우 대부분의 경우 내부적으로 다음과 같이 최적화됩니다. new StringBuilder().append() 및 마지막으로 toString()이 호출됩니다(적어도 jdk1.7에서는).

      刘奇

      StringBuilder 개체의 내용은 수정할 수 있으며 이는 메모리 사용량 측면에서 String 클래스보다 좋습니다.
      재할당은 실제로 두 개의 개체가 생성되면 수정할 수 없습니다.

      따라서 실제 사용 시 삽입, 삭제 등 문자열을 자주 수정해야 하는 경우에는 StringBuilder를 사용하는 것이 더 적합합니다.

      그리고 에디터 체커는 사양일 뿐 반드시 최고는 아닙니다.

        Peter_Zhu

        이것은 컴파일러의 최적화입니다. 즉, 여러 줄의 연결이 있으면 최적화되지 않습니다.

          최신 다운로드
          더>
          웹 효과
          웹사이트 소스 코드
          웹사이트 자료
          프론트엔드 템플릿
          회사 소개 부인 성명 Sitemap
          PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!