• Question 20171115 String&&StringBuffer&&StringBuilder的区别与联系?


    Question 20171114 String&&StringBuffer&&StringBuilder的区别和联系

    创建成功的String对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大的增加系统开销。而JavaSE 5.0新增了可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。也许我们会问那JavaSE5.0之前呢?实际在JavaSE5.0之前有StringBuffer,但是StringBuffer是线程安全的,这就会造成效率的底下,所以JavaSE5.0新增了StringBuilder来弥补StringBuffer的不足。

    String  :不可改变

    StringBuffer:可改变  线程安全

    StringBuilder:可改变  线程不安全

    验证连接字符串,String+StringBufferappend谁的效率高

    package cn.sb.capacity;
    
    public class StringAndStringBuffer {
        public static void main(String[] args) {
            fun1();
    //        fun2();
    //        fun3();
    //        fun4();
        }
        /**
         * new   String
         */
        public static void fun1(){
            String str1 = new String("");    
            long start = System.currentTimeMillis();
            for (int i = 0; i < 20000; i++) {
                str1 += i;
            }
            long end = System.currentTimeMillis();
            System.out.println("new字符串str1,添加字符串用时:"+(end-start));
        }
        /**
         * 声明字符串
         */
        public static void fun2(){
            String str2 = "";
            long start = System.currentTimeMillis();
            for (int i = 0; i < 20000; i++) {
                str2 += i;
            }
            long end = System.currentTimeMillis();
            System.out.println("声明字符串str2,添加字符串用时:"+(end-start));
        } 
        /**
         * 安全字符串缓冲
         */
        public static void fun3(){
            StringBuffer sb1 = new StringBuffer("");
            long start = System.currentTimeMillis();
            for (int i = 0; i < 200000; i++) {
                sb1.append(i);
            }
            long end = System.currentTimeMillis();
            System.out.println("安全sb1添加字符串用时:"+(end-start));
        }
        /**
         * 高效字符串缓冲
         */
        public static void fun4(){
            StringBuilder sb2 = new StringBuilder("");
            long start = System.currentTimeMillis();
            for (int i = 0; i < 200000; i++) {
                sb2.append(i);
            }
            long end = System.currentTimeMillis();
            System.out.println("高效sb2添加字符串用时:"+(end-start));
        }
    }

     

    欢迎各位大神提问题及补充不足和警醒错误!

  • 相关阅读:
    html基础知识点
    uni-app之tabBar的自己配置
    uni-app之导航配置pages.json
    js获取链接?后边的参数名称或者值
    验证码输入自动聚焦下一个input或者删除自动聚焦上一个input
    VUE中/deep/深度作用域
    vue环境下新建项目
    vue中展示数据
    VUE环境项目搭建以及简单的运行例子
    ios设置音乐audio自动播放
  • 原文地址:https://www.cnblogs.com/lin-jing/p/7836533.html
Copyright © 2020-2023  润新知