资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
广东中百科技StringString、StringBufferStringBuffer String b = a ; b += “Su”; String c = a.toUpperCase();a、b、c 各指向不同的对象。String 的重载操作符“+”和“+=” ,可以用来链接字符串。见实验方法一。2.2. StringBufferStringBufferStringBuffer,线程安全的可变字符序列。可将字符串缓冲区安全地用于多个线程。可 以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发 生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与 该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于 它不执行同步,所以速度更快。 JDK63.3. StringBuilderStringBuilderStringBuilder,一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被 单个线程使用的时候(这种情况很普遍) 。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 StringBuilder 允许预先指定大小。如果知道最终字符串大概长度,那预先指定 StingBuilder 的大小可以避免多次重新分配缓冲。 JDK6广东中百科技4.4. 实例分析实例分析定义 Java 类(见 string/test/StringConcatenation.java)1)1) 方法一方法一源码:源码:Jvm 字节码:字节码:从字节码可看出,类似这种情况的定义,java 编译器直接把拼接表达式看成单个 String 变量。2)2) 方法二方法二源码:源码:Jvm 字节码:字节码:广东中百科技从字节码中可看出,类似这种情况的定义(String 变量的定义中带有其他对象参数表 达式) ,java 编译器自动创建了一个 StringBuilder 变量来构造结果。3)3) 方法三方法三源码:源码:Jvm 字节码:字节码:广东中百科技从字节码中可看出,循环体从第 9 行开始到 38 行结束,每次运行 result += “SELECT“; 都会 new StringBuilder()一次,过程中产生大量需要垃圾回收的中间对象。4)4) 方法四方法四源码:源码:Jvm 字节码:字节码:广东中百科技从字节码中可看出,循环体从第 14 行开始到 30 行结束,循环体内直接调用 append 方法即可,代码干净整洁,效率也高。四个方法运行结果,见下图。根据运行环境不同,时间也可能不同。但是大概能看出 第三个方法运行结果比较糟糕。(两个循环次数为 1000 结果图)广东中百科技(两个循环次数为 10000 结果图)5.5. 结论结论案例说明实施说明运行时间无参数使用 string “+”拼接java 编译器直接把拼接表达 式看成单个 String 变量。0带参数使用 string “+” 拼接String 变量的定义中带有其 他对象参数表达式,java 编 译器自动创建了一个 StringBuilder 变量来构造结 果,再调用其 toString 方法。25 “ + “ORDER BY AGE ASC“; return result; /带参数使用 String+拼接字符串 public String getString(String name, int age) String result = “SELECT ID,NAME,CARDID, TRUNC(BORNEDDATE)“ + “FROM USERINFO “ + “WHERE NAME LIKE %“ + name + “% “ + “AND AGE “ + age + “ ORDER BY AGE ASC“; return result; /在循环中使用 String+拼接字符串 public String implicit() String result = “; for(int i=0; i map = new HashMap();System.out.println(“无参数使用 String+拼接字符串.“); time1 = System.currentTimeMillis(); map.put(“string1“, sc.getString(); time2 = System.currentTimeMillis();System.out.println(“运行时间:“ + (time2 - time1) + “ msnn“);System.out.println(“带参数使用 String+拼接字符串.“); time1 = System.currentTimeMillis();map.put(“string2“, sc.getString(“苏“, 25); time2 = System.currentTimeMillis();System.out.println(“运行时间:“ + (time2 - time1) + “ msnn“);System.out.println(“在循环中使用 String+拼接字符串.“);time1 = System.currentTimeMillis(); map.put(“string3“, sc.implicit(); time2 = System.currentTimeMillis();System.out.println(“运行时间:“ + (time2 - time1) + “ msnn“);System.out.println(“在循环中使用 StringBuilder 拼接字符串.“); time1 = System.currentTimeMillis(); map.put(“string4“, sc.explicit(); time2 = System.currentTimeMillis();System.out.println(“运行时间:“ + (time2 - time1) + “ ms“);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号