String是一个final Class,StringBuffer不是,StringBuffer是可变类,有能改变字符串的内容的方法 (如追加append,增insert,删delete,deleteCharAt,改replace,setcharAt方法).因为StringBuffer是一个可以实例化的类,而且它的内建机制是维护了一个capacity大小的字符数组,所以它的append操作不存在对象的消耗问题,所以我觉得如果存在String连接这种事情,StringBuffer来做会好很多。
但是其实不然.String的内存存储是在字符串常量区中.如果已经在常量区储存了已有了字符串常量.则可以直接指向该值.String a ="abc" 与String b ="abc"在内存中的指向是相同的.也就是说.String在编译期间已经被操作.而StringBuffer是一个实例化的类.只有在运行时调用其方法才能启动操作.因此.String c = a+b;比StringBuffer调用方法添加 a和b获得新字符串的效率要高.区别在哪里,就在于运行时和编译时的优化问题上. |