美文网首页
字符串拼接

字符串拼接

作者: 背影杀手不太冷 | 来源:发表于2016-06-24 10:34 被阅读429次

标签(空格分隔): java


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

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

  • 字符串是不可变的,因为字符串都是常量!如果你试着改变它们的值,另一个对象被创建,而StringBuffer和StringBuilder是可变的,这样他们就可以改变它们的值
  • StringBuffer是线程安全的。当应用程序只需要运行在单个线程则最好使用StringBuilder。StringBuilder比StringBuffer更有效率,因为StringBuffer其实是给StringBuilder加了同步锁;其实你使用Log.d(TAG,"xx"+"yy")这类写法后,编译器生成的代码已经自动帮你变成StringBuilder了

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[]。

  • 同时,使用字符串进行逻辑运算是相当缓慢的,,不建议,因为JVM将字符串转换为字节码的StringBuffer。浪费大量的开销将从字符串转换为StringBuffer然后再返回字符串

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

  • 当转化成字符串的时候,应当避免使用""串进行转化。使用合适的String.valueOf方法或者包装类的toString(value)方法。
  • 尽量使用StringBuilder进行字符串拼接。检查下老旧码,把那些能替换掉的StringBuffer也替换成它。
  • 使用Java 6 update
    20引入的-XX:+OptimizeStringConcat选项来提高字符串拼接的性能。在最近的Java7的版本中已经默认打开了,不过在Java
    6_41还是关闭的。

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

相关文章

  • R 包学习 - stringr()

    stringr: R 语言字符串处理包 字符串拼接函数str_c: 字符串拼接。str_join: 字符串拼接,同...

  • Swift5.0 字符串(String)详解

    1.字符串拼接 + 拼接 \() 拼接 2.字符串是否为空判断 3.字符串长度 4.字符串比较 == > < 5....

  • 字符串

    遍历 拼接 字符串拼接格式化 字符串的截取

  • Python 字符串详解

    字符串替换 字符串拼接 1.两个字符串拼接 2.打印拼接 字符串按照字符切割 字符串比较 字符串长度 字符串是否包...

  • 字符串api

    字符串 增 concat() //拼接任意字符串,并返回拼接后的字符串 加号 ➕ 同上 字符串 ...

  • 批量根据id修改字段

    update tableName set 字段名 = concat(id,'拼接字符串','拼接字符串');

  • 142字符串的高效处理

    1、字符串的拼接 2、StringBuilder类(字符串构建器) 使用StringBuilder来拼接字符串: ...

  • go语言string之Buffer与Builder

    操作字符串离不开字符串的拼接,但是Go中string是只读类型,大量字符串的拼接会造成性能问题。 字符串拼接的方式...

  • 字符串操作

    字符串操作 拼接 截取 长度 相等 包含 替换 去除开头末尾字符串 字符串分割 字符串拼接

  • ES6之字符串的扩展(上)

    模板字符串 在传统的拼接字符串中,使用的是‘+’进行拼接: 可以看出用+进行拼接字符串比较繁琐,尤其是当字符串特别...

网友评论

      本文标题:字符串拼接

      本文链接:https://www.haomeiwen.com/subject/loyodttx.html