2021-03-11 String 拼接 c++ & java

1.C++

C++拼接字符串:+=、append、stringstream、sprintf四种拼接字符串的方法

1.效率

根据以上结果,如果是使用Linux系统并且是g++(gcc)编译器,大量拼接字符串的效率从高到低依次为:+=、append()、stringstream、sprintf()。

2.原理

每次分配一块内存,扩展时重新分配一块更大的内存,释放前一块。string的内存扩展并非遵循某个单一规则,猜测应该是遵循某种扩展算法,根据之前的应用情况采取弹性的策略;

append方法的返回的结果为新string的引用;

事实上,在STL的实现中,用的就是上述的V1.2版本,在C++ reference 中,明确指出base_string类型是连续存储的,而string继承自base_string类型,实现也是一样的,尽管确实存在指针失效的问题,但是在找不到理想的解决方案时,如果没有比它更好的,那么它就是最好的。


2.JAVA

字符串常量的String类。 它本身不能被改变,修改时实际是新建一块内存,将引用重新赋值为新的string常量。

字符串变量的StringBuffer类 ,StringBuilder类。它的对象是可以扩充和修改的

java 拼接字符串 + 、 concat、

Strings="abcd";s=s.concat("ef");

StringBuffer   StringBuilder   :append();

StringBuffer hollis=wechat.append(",").append(introduce);

StringUtils.join;

StringUtils.join(wechat,",",introduce)

1.效率

效率从高到低依次:StringBuilder(耗时最少) ,StringBuffer ,  concat ,  + 

简单字符串直接使用+;

循环体内StringBuilder 的 append 方法进行扩展;

并发场景中进行字符串拼接的话,要使用StringBuffer来代替StringBuilder。

2.原理

+ :字符串常量在拼接过程中,是将 String 转成了 StringBuilder 后,使用其 append 方法进行处理的。

concat:创建一个新的数组,长度是拼接两个字符串之和。用这个新的数组创建一个新的string对象返回。

StringBuffer&StringBuilder append() :初始数组长度不一定=字符串的长度,有一个表示数组中已用长度的变量。如果长度不够 以一定的算法扩展。

StringBuffer使用synchronized进行声明,说明是一个线程安全的方法。而StringBuilder则不是线程安全的。



3.其他

字符串在C中是char * 类型,在C++中是一个String类型

http://www.downeyboy.com/2019/06/24/c++_string/

https://www.cnblogs.com/james6176/p/3222671.html

https://www.jianshu.com/p/0245bbd977eb


return obj == null ? "null" : obj.toString()

StringBuilder.append(str1).append(str2).toString();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容