String 和StringBuffer字符串拼接
package com.stringbuffer;/** * 思考:在实际的开发中,如果需要频繁拼接字符串,会有什么问题? * * 因为java中的字符串是不可变的,每一次拼接都会产生新的字符串,占用大量的方法区内存,造成内存空间的浪费 * String s = "abc"; * s += "hello" * 以上代码在方法区字符串常量池中创建了3个对象 * * 如果以后需要字符串的拼接:建议使用JDK自带的: * java.lang.StringBuffer * java.lang.StringBuilder * * 如何优化StringBuffer的性能 * 在创建StringBuffer的时候尽可能给定一个初始化容量 * 最好减少底层数组的扩容次数,预估一下,给一个大一些的初始化容量 */public class Demo01 { public static void main(String[] args) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("a"); stringBuffer.append("b"); stringBuffer.append("c");// 数组长度一旦定了,不可变,数组前没有+final,数组空间满了,会进行数组拷贝,之前的会被垃圾回收 stringBuffer.append(3.14); stringBuffer.append(true); System.out.println(stringBuffer.toString());// abc3.14true }}
StringBuilder和StringBuffer的区别
package com.stringbuffer;public class Demo02 { /* StringBuffer方法都有 synchronized 修饰,表示StringBuffer在多线程环境下运行时安全的 StringBuilder方法没有 synchronized 修饰,表示StringBuffer在多线程环境下运行时是不安全的 */ public static void main(String[] args) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("a"); stringBuilder.append("b"); stringBuilder.append("c"); System.out.println(stringBuilder.toString()); }}