字符串拼接

2016-06-24  本文已影响429人  背影杀手不太冷

标签(空格分隔): java


StringBuilder——字符串拼接多般是使用StringBuilder类,以及它的一系列的append方法。###

首先说一下String,StringBuilder,StringBuffer的区别:


StringBuilder原理分析:###

将字符串拼接时(不管是字面常量也好,或者是变量,方法调用的结果也好),即用“+”将多个字符串拼接时,实际上都是变成StringBuilder。如果一个字符串(不管是字面常量也好,或者是变量,方法调用的结果也好)
new StringBuilder().append( string_exp ).append( any_exp ).toString()
如果表达式里有多个+号的话,后面相应也会多多几个StringBuilder.append的调用,最后才是toString方法。
   StringBuilder(String)这个构造方法会分配一块16个字符的内存缓冲区。因此,如果后面拼接的字符不超过16的话,StringBuilder不需要再重新分配内存,不过如果超过16个字符的话StringBuilder会扩充自己的缓冲区。最后调用toString方法的时候,会拷贝StringBuilder里面的缓冲区,新生成一个String对象返回。
  所以在在我们经常将一些基本数据类型转化成字符串时,例如经常是这样做的:String text=100+"";虽然可以将整数100转化成“100”字符串,但是一个StringBuilder对象,一个char[16]数组,一个String对象,一个能把输入值存进去的char[]数组。这样是很浪费内存的,所以推荐使用String.valueOf,即String text=String.valueOf(100);这样至少StringBuilder对象省掉了。
  有的时候或许你根本就不需要转化基础类型。比如,你正在解析一个字符串,它是用单引号分隔开的。最初你可能是这么写的:
  final int nextComma = str.indexOf("'");
  或者是这样
   final int nextComma = str.indexOf('\'');

String.concat——除非只拼接两个字符串,这个方法才会比较高效一些。###

它是字符串拼接另外一个方法,它内部其实是分配了一个char[],长度就是拼接后的字符串的长度,它将字符串的数据拷贝到里面,最后使用了私有的构造方法来生成了一个新的字符串,这个构造方法不会再对char[]进行拷贝,因此这个方法调用只创建了两个对象,一个是String本身,还有一个就是它内部的char[]。

综上所述:尽量使用StringBuilder,而不用String来累加字符串
总结


StringBuffer类调用toString()方法后将转换为String类型
String类型中没有append()方法,要追加字符串”+“即可,也没有必要 append
可以直接将字符串“test”复制给声明的Stirng类的变量,而StringBuffer类的不行
String 实例 是不可变的
String 对象/实例 是不可以被改变的。
当new一个String对象时,JVM会在内存中创建一个String对象,当另外一个String对象值与它一样时,会将该对象直接指向对应的地址。
String a = "abc";
String b = "abc";
System.out.println(a == b);//true

上一篇 下一篇

猜你喜欢

热点阅读