`
m635674608
  • 浏览: 5003661 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JDK1.6字符串拼接自动生成StringBuilder

    博客分类:
  • java
 
阅读更多

JDK1.6字符串拼接

从JAVA诞生那天起,稍微“有些水平”的程序员都被告知,如果有大量的字符串连结,请不要使用字符串相加,而应该使用StringBuffer的append操作然后toString().

到了JAVA5,我们又被告诉知,StringBuilder是StringBuffer的非同步版,所以绝对大多数时候我们“更”可以用 StringBuilder来代替加操作。因为一个可能被多线程访问的实例字段的StringBuffer操作的情况很少,和在方法中调用字符串连结相比 1%都不到。

         但是到了JAVA6,因为编译器“始终”把字符串的+连结编译成StringBuilder,所以在99%的情况,我们应该使用加操作。

理由是:

1.用加操作比其它操作看起来直观,写起来省事,JAVA6之前,即使明知道有性能问题我们还会在一些时候全使用+连结,根本原因当然是这种写法直观,简单。

         publicvoid appendStr(String art) {

       String show = "<" + art + ">";

}

//请注意,这里的例子只是为了说明"+"写法直观,并不是说只有常量字符串相加(常量字符串其实直接编译成一个字符串而不是append 了)JAVA6才优化,那是之前的事,对于JAVA6,只要有是字符串操作的的+连结(第一个变量或常量是字符串),后面不管是常量还是变量,都会进行编 译优化

          public void appendStr(String art)

          {

                   String show = (new StringBuilder("<")).append(art).append(">").toString();

          }

谁要说第二种试方式美观写起来爽我一定当面抽他。打到他脑子正常为止。

 2.我们有时还自觉不自觉地使用StringBuffer,而JAVA6总是把第一种形式优化为StringBuilder,在99%的情况下性能更好,除非你需要一个被多线程访问的实例字段操作。

 3.特别是,有时我们自己写StringBuilder时,sb.append(line);后来想在前后加一个"<",">",于 是很懒地写成sb.append("<"+line+">");这种情况非常多,但这样情况是先生成一个StringBuilder计 算"<"+line+">",然后toString()

StringBuilder所append,还不如全部加操作让编译器用一个StringBuilder来append.

当然,循环中加操作千万不要这么做(这种需求除了测试,实际应用可能是万分之一的机会吧?),编译器虽然会优化编译,但它是在循环内部生成 StringBuilder而不是在外部。这种情况一定要自己在外部手工定义StringBuilder而不能依赖编译器了。但绝对多数情况,也就是 99%的情况我们是 str = "axman" + new Object() +1 + "good"+.......这种方式,完全可以信任编译器来优化。

另外只有两个字符串连结时请使用concat.

For循环不要再循环里面+号拼接字符串,因为会在循环里面生成StringBuilder.

public void appendStrForOwnerStringBuffer() {

        StringBuffer sb =new StringBuffer();

        for (int i = 0; i< 10; i++) {

           sb.append("<").append(i).append("><br>");

        }

    }

    public voidappendstrForJVMCreateStringBuffer() {

        String show ="";

        for (int i = 0; i< 10; i++) {

            show +="<" + i + "><br>";

        }

    }

Xjad反编译:

     public voidappendStrForOwnerStringBuffer()

     {

          StringBuffer sb =new StringBuffer();

          for (int i = 0; i< 10; i++)

              sb.append("<").append(i).append("><br>");

 

     }

 

     public voidappendstrForJVMCreateStringBuffer()

     {

          String show ="";

          for (int i = 0; i< 10; i++)

              show = (new StringBuilder(String.valueOf(show))).append("<").append(i).append("><br>").toString();

 

     }

 

http://m.blog.csdn.net/article/details?id=6972886

分享到:
评论

相关推荐

    苹果电脑安装jdk1.6 mac for jdk1.6 jdk6 安装版

    mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...

    jdk1.6 源码jdk1.6 源码

    Java Development Kit (JDK) 1.6 是Java编程语言的一个早期版本,它包含了Java运行时环境(JRE)、编译器(javac)和其他开发工具。深入理解JDK 1.6的源码对于Java开发者来说至关重要,因为它揭示了语言核心库的工作...

    jdk1.6集成jjwt的问题

    标题中的“jdk1.6集成jjwt的问题”指的是在Java Development Kit (JDK) 版本1.6的环境下,尝试整合JSON Web Token (JWT) 库jjwt时遇到的挑战。JWT是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 ...

    ZxingUtil生成二维码适用JDK1.6及以下

    本篇文章将深入探讨如何使用ZxingUtil在JDK1.6及以下版本中生成彩色二维码。 首先,让我们理解一下二维码的基本原理。二维码(Quick Response Code)是一种二维条形码,通过编码数据矩阵,能够存储大量的文本、数字...

    okhttp3.8源码使用jdk1.6重新编译_okhttp3.8.0-jdk1.6.zip

    1.okhttp3.8源码使用jdk1.6重新编译,已集成了okio,在javaweb项目中使用,未在安卓项目中使用 2.okhttp3.8源码使用jdk1.6重新编译_okhttp3.8.0-jdk1.6.jar

    aspose-words-15.8.0-jdk1.6

    aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-...

    JDK1.6版本下载

    **JDK 1.6版本详解** Java Development Kit(JDK)是Oracle公司提供的用于开发和运行Java应用程序的工具集合。JDK 1.6,也被称为Java SE 6,是Java平台的一个重要版本,发布于2006年12月11日。这个版本在Java社区中...

    jdk1.6压缩包,下载即用

    - **下载**:从Oracle官网或其他可信源下载JDK 1.6的安装文件,如"jdk1.6.exe"。 - **安装**:双击执行安装文件,按照向导步骤进行安装,选择合适的安装路径。 - **环境变量设置**:安装完成后,需要在系统环境变量...

    jdk1.6 解压版-windows

    JDK1.6是Oracle公司发布的一个较早版本,适用于Windows操作系统。在这个解压版中,用户无需进行安装过程,可以直接在Windows环境下使用JDK的各个工具。 JDK1.6包含的主要组件有: 1. **Java编译器**(javac):...

    JDK1.6百度云下载

    根据提供的标题、描述以及部分内容,我们可以总结出与JDK1.6百度云下载相关的几个重要知识点: ### 一、JDK1.6简介 Java Development Kit(简称JDK)是Sun Microsystems公司针对Java语言开发的一套开发工具包,它...

    jdk1.6jar包

    6. **动态代理**:JDK 1.6引入了`java.lang.invoke`包,支持动态创建代理类,使得运行时生成代码成为可能。 7. **JDBC 4.0**:增强了数据库连接池管理,提供了自动连接关闭,以及对SQL标准的更好支持。 8. **国际...

    okhttp3.8.0-jdk1.6.zip

    《OkHttp3.8.0-JDK1.6:低版本环境下的高效网络通信库》 OkHttp3.8.0-jdk1.6.zip是一个专门为Java Web项目设计的网络通信库,它针对JDK1.6进行了优化和重新编译,确保在较低版本的Java环境中也能稳定运行。OkHttp,...

    jdk1.6解决base64

    本篇文章主要针对JDK 1.6环境下Sun提供的Base64编码功能不可用的问题,并提出了解决方案。 ### JDK 1.6 Base64 编码问题 #### Sun的Base64编码问题 在JDK 1.6中,Sun提供了自己的Base64编码类`sun.misc.BASE64...

    jdk1.6解压版(免安装版)

    7. **使用JDK1.6**:现在你可以开始编写Java程序,使用`javac`命令编译源代码,并用`java`命令运行生成的字节码文件。此外,JDK还包含了诸如javadoc(生成API文档)、jmap(内存分析工具)和jconsole(JVM监控工具)...

    jdk 1.6 64位

    JDK 1.6,也称为Java SE(标准版)6,是Java编程语言的一个早期版本,发布于2006年。它包含了Java编译器、Java虚拟机(JVM)、Java类库以及开发者用来创建、调试和部署Java应用程序所需的各种工具。 **JDK 1.6的...

    jdk1.6 32位免安装纯绿色版

    本资源是JDK 1.6的32位免安装纯绿色版本,非常适合那些希望快速启动Java开发而无需进行复杂安装过程的用户。 JDK 1.6,也被称为Java SE 6,是Sun Microsystems(后被Oracle公司收购)发布的Java平台标准版的一个...

    解决JDK1.6下的Base64报错问题

    在资源文件中的`解决JDK1.6下的Base64.jar`可能是包含了一个兼容JDK 1.6的Base64实现的第三方库,你可以直接将这个jar包添加到你的项目类路径中,这样就可以使用其中提供的Base64类而无需修改代码。添加方法通常包括...

    IBMJDK1.6linux.zip

    IBM JDK 1.6是IBM公司为Java开发者提供的一个针对Linux 64位操作系统的Java开发工具包。这个版本的JDK是Java平台标准版(Java SE)的一部分,主要用于开发和运行Java应用程序、Web应用程序以及企业级应用。IBM JDK与...

    JDK1.6下的Base64解决方式.txt.zip

    然而,在JDK 1.6版本中,标准库并没有内置对Base64编码和解码的直接支持,这给开发者带来了一些不便。本文将详细解释如何在JDK 1.6环境下解决Base64编码和解码的问题。 首先,JDK 1.8及更高版本引入了`java.util....

    如何解决JDK1.6下的Base64

    提供的压缩包文件"解决JDK1.6下的Base64.txt"可能包含了如何集成和使用这些第三方库的详细步骤,或者可能是自定义的Base64实现。在实际应用中,你需要根据文件内容来调整你的项目配置。 总的来说,尽管JDK 1.6没有...

Global site tag (gtag.js) - Google Analytics