javascript - concat() 和 + 有什么区别?
怪我咯
怪我咯 2017-04-10 16:12:57
[JavaScript讨论组]
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在这种情况下能把他解释成 基本类型?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
PHPz

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

大家讲道理

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号