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