String
String创建过程
字符串拼写的几种方式
String重写equal()方法
JavaString深入理解
“+”号拼接
利用+进行拼接的时候,会将+号的拼接方式变换成StringBuilder的append方式,也就是说每次利用+会建立一个StringBuilder。因此,在循环内部意味着每执行一次循环,就会创建一个StringBuilder对象。因此循环里面不要用+号,在循环外面建立一个StringBuilder或StirngBuffer。
private static void test(String a,String b,String c) {
String s = a + b + c;
}
//将会被优化为
private static void test2(String a, String b, String c) {
(new StringBuilder()).append(a).append(b).append(c).toString();
}
StringBuilder与StringBuffer
StringBuffer 类没有重写Object类下的equals方法,所以实质还是比较,所以如果需要比较两个StringBuffer对象是否相等则toString()方法转为String。
StringBuffer sb0=new StringBuffer(“hello”);
StringBuffer sb1=new StringBuffer(“hello”);
System.out.println(sb0sb1);false
System.out.println(sb0.equals(sb1));false
System.out.println(sb0.toString().equals(sb1.toString()));true
关于equals()和==:
这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;String类已经重写过了equals方法。
而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。
而在符合数据类型中,则equals和==都是比较两对象的地址是否相同,除非重写equals