看下列代码,给出结果
- public class StringTest{
- public static void main(String args[]){
- String a="ab";
- String b="cd";
- String ab=a+b;
- String c="ab"+"cd";
- String d="abcd";
- System.out.println(ab==d);
- System.out.println(c==d);
- }
- }
结果:
false
true
分析原因
"abcd"是字面值常量,它存储在常量表里,"ab"+"cd"在编译期便成了"abcd",因为是到常量表里找,所以c和d的地址相同
而ab=a+b的操作是这样的
- StringBuffer temp=new StringBuffer();
- ab=temp.append(a).append(b);
收获:
1.字符串常量的拼接是在编译期
2.String的+操作会产生临时StringBuffer对象,性能不如使用StringBuffer