- public class Con {
- public static void main(String[] args){
- String msg="msg";
- String s="abc"+msg+"def";
- System.out.println(s);
- }
- }
复制代码 此代码工作原理如下: JDK自带的工具javap反编译以上代码 javap -c Con 生成结果如下截图
若你懂汇编,此代码肯定熟悉,编译器自动引入了StringBuilder类,虽然源代码并没有使用StringBuilder类,每个字符串调用一次StringBuilder,共调用了3次,编译效率提高了
若多次修改同一个String对象引用,就是 产生没必要了垃圾堆,分析如下
修改次数多,产生垃圾堆就多,影响执行效率,想象一下for循环万次,内存中的对象没有被GC清理,占多大的内存,很惊人的数字
StringBuffer 线程同步,一搬都是多线程中修改某数据缓冲区的内容,通过每个线程实行了方法调用的顺序一致来实现
它本身就是对自身对象操作,不会生产新的对象,可以改变对象引用
StringBuilder 线程非同步 ,单独线程使用
LZ也可测试这三个性能上的差别 StringBuilder >StringBuffer>String
|
|