1 String str1 = "1";
2 String str2 = new String("2");
3 System.out.println(str1.concat(str2));
4 System.out.println(str2.concat(str1));
5 System.out.println(str1 + str2);
/* 运行结果是: 12 21 12 */
两者都是在堆内存新开辟一个空间,然后把两个字符串拼接起来,并返回引用地址?对么?
最容易想到的,concat() 和 + 两者的区别:
1.concat()是方法,+是表达式。
2.concat()只能字符串拼接字符串,+号可以连接不同数据类型。
那么问题来了,cancat()能做的,+号也可以做,那为什么还会有cancat()方法?是不是有性能差异或者其他的原因?
在什么情况下,用cancat()会比用 + 更好?
还有一个String类的小疑问,第一行 String str1 = "1";并没有在堆内存中开辟空间,那是不是说明String在这种情况下能把他解释成 基本类型?
第一种直接赋值是将字符串存缓到了一个常量池里,以后再用到这个字符串的时候系统就会直接从这个常量池里把它取出来,但如果new一个字符串类型的对象的话就会在堆内存新开一片空间。性能上考虑,一般建议直接赋值而不是new一个对象,java允许人们像使用基本数据类型一样使用String,String类型的字符串是不可变的,用“+”会消耗较多内存资源,一般有字符串拼接操作的建议的使用StringBuffer或StringBuilder