开发者社区> 问答> 正文

concat() 和 "+" 有什么区别?

`
String str1 = "1";
String str2 = new String("2");
System.out.println(str1.concat(str2));
System.out.println(str2.concat(str1));
System.out.println(str1 + str2);
`
/ 运行结果是: 12 21 12 /
两者都是在堆内存新开辟一个空间,然后把两个字符串拼接起来,并返回引用地址?对么?
最容易想到的,concat() 和 + 两者的区别:
1.concat()是方法,+是表达式。
2.concat()只能字符串拼接字符串,+号可以连接不同数据类型。
那么问题来了,cancat()能做的,+号也可以做,那为什么还会有cancat()方法?是不是有性能差异或者其他的原因?
在什么情况下,用cancat()会比用 + 更好?
还有一个String类的小疑问,第一行 String str1 = "1";并没有在堆内存中开辟空间,那是不是说明String在这种情况下能把他解释成 基本类型?

展开
收起
蛮大人123 2016-03-06 10:51:29 3928 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    第一种直接赋值是将字符串存缓到了一个常量池里,以后再用到这个字符串的时候系统就会直接从这个常量池里把它取出来,但如果new一个字符串类型的对象的话就会在堆内存新开一片空间。性能上考虑,一般建议直接赋值而不是new一个对象,java允许人们像使用基本数据类型一样使用String,String类型的字符串是不可变的,用“+”会消耗较多内存资源,一般有字符串拼接操作的建议的使用StringBuffer或StringBuilder.

    2019-07-17 18:54:15
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载