zoukankan      html  css  js  c++  java
  • String、StringBuilder和StringBuffer的区别和用法

    分别使用使用这三种来拼接字符串,对比各自损耗的时间:
    经过测试:

    package com.test;
    
    public class Main{
    
        public static void main(String[] args){
            testString();
            testStringBuffer();
            testStringBuilder();
        }
        private static void testStringBuilder() {
            long begin = System.currentTimeMillis();
            StringBuilder str = new StringBuilder("");
            for (int i = 0; i < 30000; i++) {
                str.append(i);
            }
            long end = System.currentTimeMillis();
            long time = end - begin;
            System.out.println("-------------StringBuilder性能快--------------");
            System.out.println(time);
        }
        private static void testStringBuffer() {
            long begin = System.currentTimeMillis();
            StringBuffer str = new StringBuffer("");
            for (int i = 0; i < 30000; i++) {
                str.append(i);
            }
            long end = System.currentTimeMillis();
            long time = end - begin;
            System.out.println("------------StringBuffer安全的---------------");
            System.out.println(time);
        }
        //String 做做字符串拼接的时候,性能极低,每次拼接的时候对象改变
        public static void testString(){
            long begin = System.currentTimeMillis();
            String str = "";
    /*      for (int i = 0; i < 30000; i++) {
                str += i;
            }*/
            for(Integer i =0; i< 30000; i++){
                str += i.toString();
            }
            long end = System.currentTimeMillis();
            long time = end - begin;
            System.out.println("-----------String----------------");
            System.out.println(time);
        }
    }
    

    结论:以后拼接字符串,统统使用StringBuffer/StringBuilder,不要使用String。

    String和StringBuilder以及StringBuffer的区别:
    StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的。

    唯一的区别(建议使用StringBuilder):
    StringBuffer:StringBuffer中的方法都使用synchronized修饰符,表示同步的在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低。
    StringBuilder:StringBuilder没有使用synchronized修饰符,不安全,但性能高。
    StringBuilder sb = new StringBuilder ()等价于…new StringBuilder(16)(API可见..) 使用StringBUilder无参数的构造器,在底层创建一个长度为16的char数组:
    char[] value = new char[16];
    此时该数组只能存储16字符,如果超过了,得自动扩容:
    自动扩容(创建长度更大得数组,再把之前得数组拷贝到新数组)
    此时性能极低,一般得,我们事先知道大概需要存储多少字符,在构造器中就应该设置。

  • 相关阅读:
    XtraForm中OfficeSkins以及BonusSkin皮肤的设置
    XtraForm中更换皮肤
    XtraForm默认皮肤的显示
    wcf异常汇总
    使用JS意识到自己主动提交表单
    怎么样sourceforge开源项目发现,centos安装-同htop安装案例
    战国评论(三)---一起
    Mesos-error
    iOS 执行ScrollView在空白空间-解
    【2014 Multi-University Training Contest 2 1002】/【HDU 4873】 ZCC Loves Intersection
  • 原文地址:https://www.cnblogs.com/treasure716/p/10019533.html
Copyright © 2011-2022 走看看