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();