美文网首页
Java-L05: String, StringBuilder,

Java-L05: String, StringBuilder,

作者: WenxuanLi | 来源:发表于2019-04-09 05:34 被阅读0次

李文轩 2019-03-18
声明:这是本人学习极客时间的Java核心36讲的笔记,有侵权请联系我。


String:

  • 字符串常量池
    • Java为了避免在一个系统中产生大量的String对象
    • 不用new方法创建时,首先检查池中是否有值相同的字符串对象。有则不需要创建,直接从池中查找到的对象引用;没有则新建字符串对象,返回对象引用,并将新创建的对象放入池中。
String str1 = "123"; //直接赋值,放入字符串池
  • new方法时,不检查字符串池,直接在栈或堆上创建一个新的对象,也不会把对象放入池中。
String Str2 = new String("123"); //new方法赋值,不放入字符串池
  • 特性
    1. 不可变
      • String 对象生成后,不能再堆它进行改变。
      • 当一个对象需要被多线程共享时,可以省略同步和锁等待时间
      • 提升多线程性能,降低复杂度
    2. 针对常量池优化
      • 用两个String 对象拥有相同的值时,他们只引用常量池中的同一个拷贝
      • 同一个字符串反复出现时,这个技术可以大幅度节省内存空间

StringBuffer/StringBuilder

  • 都实现了AbstractStringBuilder抽象类,拥有一致的对外的调用接口
  • 底层在内存中与String相同,都是一个有序的字符序列(char数组);StringBuffer/StringBuilder 的对象值是可以改变的,并且值改变,对象引用不变
  • 建造过程中,储存数组会先有默认容量;随着数据加入,创建更大数组,拷贝数据,弃用旧数组。
  • 不用:
    • StringBuffer是线程安全的
      • 性能相比较低
      • 所有方法加上了 synchronize关键字
    • StringBuilder 是线程不安全的
      • 性能相比较高

应用场景

  • 若字符串不需要经常发生变化,优先使用String类;提高可读性
  • 若频繁进行字符串运算
    • 多线程(XML解析,HTTP参数解析与封装):StringBuffer
    • 单线程(SQL语句平装,JSON封装):StringBuilder

相关文章

网友评论

      本文标题:Java-L05: String, StringBuilder,

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