• String、StringBuffer、StringBuilder的区别——Java面向对象基础(24)


    一、String、StringBuffer、StringBuilder的一些概念

    1.Sting的值一般存放在中或者常量池

            String str0=new String("ABC");//开辟新空间,存放在堆中
            String str1="ABC";//存放在常量池中

    当添加字符时,需要开辟新空间。效率低下。

     

     注意常量池中的另当别论。和在堆中的以及StringBuffer和StringBuilder都不同。

    2.StringBuffer和StringBuilder拥有缓冲区,添加或更改字符时不再需要开辟新空间其缓冲区为动态增长。效率较高

            StringBuilder sb1=new StringBuilder("AB");
            sb1.append("C");
            StringBuffer sb2=new StringBuffer("AB");
            sb2.append("C");

     

    二、区别

    1.String的一个特殊情况,编译器的优化导致指向常量池

     

     2.如果字符串要进行值的比较最好使用equals方法

     3.StringBuffer的创建

            StringBuffer sb0=new StringBuffer("AB");
            sb0.append("C");

     4.StringBuilder的创建

            StringBuilder sb=new StringBuilder("AB");
            sb.append("C");

     5..StringBuffer与StringBuilder的append方法部分源码分析

    //StringBuffer的append方法源码                    
                @Override
                public synchronized StringBuffer append(String str) {//synchronized(同步锁)修饰方法就是线程安全的
                    toStringCache = null;
                    super.append(str);
                    return this;
                }
    //StringBuilder的append方法源码
                @Override
                public StringBuilder append(String str) {
                    super.append(str);
                    return this;
                }

     (1)synchronized(同步锁)修饰方法就是线程安全的。

     (2)StringBuffer是线程安全的,StringBuilder线程不安全的。

     (3)StringBuilder效率比StringBuffer更高,因为它是线程不安全。注意在实际的开发过程中使用StringBuilder的频率也会比StringBuffer高。

     6.三者选择情况使用

    当出现频繁的对字符串进行修改、添加、删除时。StringBufferStringBuilder

    总结效率高低:StringBuilder > StringBuffer > String

     

  • 相关阅读:
    sdnu 1513 字符串翻转
    hdu-1559 最大子矩阵(二维树状数组模板题)
    hdu-1556 树状数组
    1049.饭盒
    1092.校门外的树
    1012.区间合并
    1054.数独
    1175.开心的金明 01背包
    空格(Space)的ASCII码值是:32
    js为lable和div赋值
  • 原文地址:https://www.cnblogs.com/Unlimited-Rain/p/12535398.html
Copyright © 2020-2023  润新知