Java基础之String,StringBuffer,StringBuilder的区别与使用

首先,来讲一下String,StringBuffer,StringBuilder三者之间的相同点。
这三者都是用来封装字符串
Java基础之String,StringBuffer,StringBuilder的区别与使用_第1张图片由图可知,这三者均继承于CharSequence接口
接下来讲讲三者的不同点!

不同点之一:

String字符串的值是不可以被改变的,从创建到销毁。
而StringBuffer和StringBuilder继承与AbstractStringBuilder类,其采用字符数组保存,故是可变的。
所以使用场景:
String来保存不经常变的,StringBuffer和StringBuilder保存经常变的。试想如果用String来保存可变的,那么每次都创建一个新的对象,旧的对象被回收,就会影响程序的性能。
String字符串修改的方法是首先创建一个StringBuffer,然后调用StringBuffer的append方法,最后调用toString()方法把结果返回

代码:
String str = "王";
str += "胖子";

实际进行的操作:
StringBuffer sb = new StringBuffer(str);
sb.append("胖子");
str = sb.toString();

不同点之二:

创建的方式:

        // String 可以赋值或构造器
        String a="王小胖";
        String b=new String("王二胖");
        // StringBuffer 构造器
        StringBuffer c=new StringBuffer("王瘦瘦");
        // StringBuilder 构造器
        StringBuilder d=new StringBuilder("王小瘦");

不同点之三:

equals和hashCode方法
String实现了equals()方法和hashCode()方法,故new String(“java”).equals(new String(“java”))的结果为true;

而StringBuffer没有实现equals()方法和hashCode()方法,因此,new StringBuffer(“java”).equals(new StringBuffer(“java”))的结果为false,将StringBuffer对象存储进Java集合类中会出现问题。

不同点之四:

使用的场景:
StringBuffer和StringBuilder都有对字符串进行修改的功能,用法也差不多,只是:
String:操作数量较小
StringBuilder线程不安全 单线程下进行操作大量数据
StringBuffer线程安全 多线程下进行操作大量数据

你可能感兴趣的:(javase)