String:适用于少量的字符串操作的情况。值都是常量,都是不可更改的对象。【静态方式构造对象时,对象存在常量池,在常量池中找,没有了再new。动态构造对选是每次赋值都是new,这样占用大量的资源。】
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。因为方法中都有syschronized【StringBuffer是在缓冲区进行操作,他的底层相当于一个new一个数组(其初始容量16个字符),每次修改不会再new,而是在同一个对象数组中扩容(可以通过hashcode(查看地址是相同的)),节省了资源。】
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 ,线程不安全。