String 、StringBuffer 和StringBuilder的区别 妖狐艹你老母 2022-01-20 11:41 224阅读 0赞 ### **一、可变与不可变** ### String类中使用字符数组保存字符串;通过源码分析我们可以看出String是由final修饰的,如图 ![20190611092055781.png][] StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,即这两种对象都是可变的。如图 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIyODk1MA_size_16_color_FFFFFF_t_70][] ### **二、线性安全** ### String 是不可变的,显然是线程安全的; StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的,源码如下 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIyODk1MA_size_16_color_FFFFFF_t_70 1][] StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。 [20190611092055781.png]: /images/20220120/b6dc2493b41340de8318e54973807348.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIyODk1MA_size_16_color_FFFFFF_t_70]: /images/20220120/d4b059199d7944b2826c1f8feb13be49.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIyODk1MA_size_16_color_FFFFFF_t_70 1]: /images/20220120/e24797d16d3243629da085efe9ac6770.png
还没有评论,来说两句吧...