String:字符常量,适合少量字符操作,不容易经常改动的字符操作。
StringBuilder:字符变量(非同步),适合单线程在字符缓冲区的大量操作。
StringBuffer:字符变量(同步),适合多线程在字符缓冲区的大量操作。
String作为字符常量,存储在jvm的常量池中,同样内容的字符串在常量池中只被创建一次。
StringBuilder,StringBuffer 作为普通对象,存储在堆中,同样的内容在堆中可以创建多次。
String作为字符常量内容是不能被修改的,所以每次对String的内容修改,其实都是新建字符对象,所以内存开销比较大,影响性能。像那种循环遍历修改字符串一定不要使用String,单线程环境可以使用StringBuilder,多线程并发环境下使StringBuffer。
想必大家也知道所谓的同步就是加锁操作,必然会会在时间上有所牺牲。
所以大部分情况下执行速度的比较结果是:StringBuilder>StringBuffer>String。