• 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字符,如果超过了,得自动扩容:
    自动扩容(创建长度更大得数组,再把之前得数组拷贝到新数组)
    此时性能极低,一般得,我们事先知道大概需要存储多少字符,在构造器中就应该设置。

  • 相关阅读:
    Android 内存分析工具 MAT(Memory Analyzer Tool)
    google教程
    webView中支持input的file的选择和alert弹出
    记录一些容易忘记的属性 -- UIImageView
    记录一些容易忘记的属性 -- UIGestureRecognize手势
    使用苹果提供的汉字转拼音方法
    关于Xcode调试的帖子,感觉不错,转来看看
    记录一些容易忘记的属性 -- UIKeyboard
    记录一些容易忘记的属性 -- NSTimer
    记录一些容易忘记的属性 -- UIView
  • 原文地址:https://www.cnblogs.com/treasure716/p/10019533.html
Copyright © 2020-2023  润新知