首页 > 其他分享 >String、StringBuffer、StringBuilder区别

String、StringBuffer、StringBuilder区别

时间:2023-03-07 16:33:39浏览次数:35  
标签:java String StringBuffer 线程 StringBuilder new

老生常谈问题:String、StringBuffer、StringBuilder区别

它们的相同点是都用来封装字符串;都实现了CharSequence接口。

区别 执行速度 线程安全 使用场景 是否实现equals、
hashCode方法
初始化方式
String 最差 线程安全 少量字符串操作 实现了,new String("java").equals(new String("java"))的结果为true; 构造器:String s = new String();
直接赋值:String s = "hello";
StringBuffer 其次 线程安全 多线程环境下的大量操作 没有,new StringBuffer("java").equals(new StringBuffer("java"))的结果为false 构造器
StringBuffer sb = new StringBuffer("hello");
StringBuilder 最快 线程不安全 单线程环境下的大量操作 没有,new StringBuilder("java").equals(new StringBuilder("java"))的结果为false 构造器
StringBuilder sb = new StringBuilder("hello");
  1. String:String类由final关键字修饰的,是一个不可变类,创建String对象后,该对象的字符串是不可改变的,直到这个对象被销毁,如果进行字符串拼接、截取等操作都会产生新的String对象(根据反编译结果, = s1+s2 实际操作是s3= new StringBuilder().append(s1).append(s2).toString();)。
  2. StringBuffer:StringBuffer继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,是可变类。线程安全是因为源码中它所有的方法都加了synchronized 关键字修饰,从而保证了线程安全,但同时因为由锁的开销也降低了效率; 扩容:默认初始容量16个字符
  3. StringBuilder:StringBuilder也是继承自AbstractStringBuilder类,也是可变类

标签:java,String,StringBuffer,线程,StringBuilder,new
From: https://www.cnblogs.com/destiny-2015/p/17188518.html

相关文章