zoukankan      html  css  js  c++  java
  • 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));
        }
    }

     

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

  • 相关阅读:
    C# post请求,Json转换实体类
    jq div 托拉拽
    json转换成实体类
    C# 队列、锁、异步
    关于C#调用protobuf 序列化和反序列化
    关于System.Data.Entity.Infrastructure.DbUpdateException 的问题
    C# 本地CSS和JS引用无问题,部署服务器之后出现500错误
    windows服务
    下拉加载更多DEMO(js实现)
    禁用iPhone手机浏览器上给电话号码自动加上的link样式
  • 原文地址:https://www.cnblogs.com/lin-jing/p/7836533.html
Copyright © 2011-2022 走看看