素材牛VIP会员
concat() 和 + 有什么区别?
 貪***续  分类:Java代码  人气:1229  回帖:2  发布于6年前 收藏
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在这种情况下能把他解释成 基本类型?

 标签:c#javascriptjava

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv1 新人
编***魔 职业无 6年前#1

+算是远算符重载,concat才是正统的方法,从实现上没区别。
偷偷的告诉你,在javascript中字符串是基本类型。
在Java中同样的字符串只存一份,从这个角度上来看字符串可以看做基本类型。但是如果把他作为基本类型那就不能让它有属性和方法,所以java里并没有把其作为基本类型。
在 Javascript 中基本类型也可以有方法,都继承了Object,只不过是只读的。因此string可以作为基本类型。javascript中也是有 “xxxx” 和 new String 两种,前一种是基本类型,后一种是对象。在js里他们的唯一区别就是转换为bool类型时候的结果。
如上所述,其实字符串就是基本类型,只不过java不能明确的说他是基本类型。

Lv2 入门
随***@ 技术总监 6年前#2

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

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取