/** * * 几种字符串创建方式的比较 * */ public static void compare() { //指向对象池中的"abc",不在堆栈中创建对象 String str1 = "abc"; //指向对象池中的"abc",不在堆栈中创建对象 String str2 = str1; //在堆栈中创建,指向对象 String str3 = new String("abc"); //指向对象池中的"abc",不在堆栈中创建对象 String str4 = "a"+"bc"; String a = "c"; //在堆栈中创建对象,并指向该对象 String str5 = "ab" + a; //在堆栈中创建对象,并指向该对象 String str6 = "ab".concat(a); //在堆栈中创建对象,并指向该对象 String str7 = "ab".concat("c"); System.out.println(str1==str2);//true System.out.println(str1==str3);//false System.out.println(str1==str4);//true System.out.println(str1==str5);//false System.out.println(str1==str6);//false System.out.println(str1==str7);//false System.out.println(str3==str4);//false System.out.println(str3==str5);//false System.out.println(str3==str6);//false System.out.println(str3==str7);//false } /** * 采用不同的方式创建空字符串 */ public static void compareEmpty() { String str1 = new String(""); String str2 = ""; String str3 = new String(""); //intern()方法会判断字符串是否在字符串池中,如果存在直接返回引用即可 String str4 = "".intern(); String str5 = ""+""; //trim()方法会在堆栈中创建一个对象 String str6 = " ".trim(); String str7 = " "; String str8 = " ".trim(); String str9 = "".concat(""); System.out.println(str1==str2);//false System.out.println(str1==str3);//false System.out.println(str1==str4);//false System.out.println(str1==str5);//false System.out.println(str1==str6);//false System.out.println(str1==str7);//false System.out.println(str1==str8);//false System.out.println(str1==str9);//false System.out.println(str2==str3);//false System.out.println(str2==str6);//false System.out.println(str2==str8);//true System.out.println(str2==str9);//false System.out.println(str6==str8);//false** }字符串操作中的效率问题
字符串的切分算法采用StringTokenizer的效率优于String的Split方法,字符串切分中StringToken的效率优于split方法字符串的拼接中采用StringBuilder的效率高于字符串相加或者new String().concat()方法,因为字符串相加或者拼接的方式都会在对象池中查找字符串是否存在,如果不存在则创建,这样在拼接的过程中会产生大量中间过程的字符串,占用内存资源,StringBuilder效率优于StringBuffer,但是StringBuffer线程安全
深入java字符串原理及其效率分析,布布扣,bubuko.com
原文:http://blog.csdn.net/code4grow/article/details/21275731