美文网首页
Java 从源码角度理解String StringBuffer

Java 从源码角度理解String StringBuffer

作者: 建瓯 | 来源:发表于2019-04-13 07:26 被阅读0次


    不可变对象

    对象被完全创建之后,对象的内部状态不能被改变;基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象状态也吧能改

    1、String,StringBuilder,StringBuffer 内部都是用char[]数组来实现;

    从实际应用可能的场景中分析String,StringBuilder,StringBuffer产生的背景

    实际应用我们对字符串的操作做出如下几种操作:插入,删除,修改,拼接,截取,查找,替换;

    String 源代码char[]是final,所以对字符串的操作;中间会新建临时变量,对字符串的操作不会影响原来的字符串;操作完成返回的是一个新字符串对象

    2、StringBuffer和StringBuidler 封装的是可变数组,可变字符序列;对字符串的操作不会产生新的对象;他们都是继承AbstractStringBuilder,他们对数组的操作方法实现是一样的,只是StringBuffer的方法上

    加了synchronized关建字;内部对char数组的操作都是通过System.arraycopy完成

    3、StringBuffer 因为方法上加了synchronized关键字,所以对象是线程安全的,所以效率低;多线程环境下使用

    4、String 是不可变对象,所以也是线程安全的,字符少量情况下使用

    5、StringBuidler 不是线程安全的,在非多线程环境下使用,效率高

    相关文章

      网友评论

          本文标题:Java 从源码角度理解String StringBuffer

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