zoukankan      html  css  js  c++  java
  • 可变的StringBuffer类和StringBuilder类

    基本概述

    由于String类描述字符序列上是不可改变的,因此描述多个类似的字符串需要单独保存,此时内存空间消耗比较大。

    为了节省内存空间直接对对象字符序列本身进行改变,则使用 StrungBuffer和StringBuilder。

    1. StringBuffer属于线程安全的类,效率比较低
    2. StringBuilder属于非线程安全的类,效率比较高,推介使用

    常用方法

    StringBuilder(String str)  - 根据字符串来构造对象
         - 初始容量为:16 + 字符串参数的长度
         - 该类没有重写equals()和hashCode()方法,但是重写了toString() 方法
        
         int capacity()  - 用于获取当前对象的容量并返回
         int length()   - 用于返回当前对象的字符个数
       
    StringBuilder insert(int offset, String str) - 用于将str插入到当前字符串中offset的位置并返回。
                                                   插入的时候会改变字符串的容量
     
    StringBuilder append(String str)   - 用于将str追加到当前字符串的末尾位置
    
    StringBuilder delete(int start, int end)   - 用于从当前字符串中将start到end之间的字符串内容移除。
    
    StringBuilder replace(int start, int end, String str)   - 用于将当前字符串从中start到end之间的字符串用str替换。
    
    StringBuilder reverse()   - 用于将当前字符串中的字符序列反转过来 

    下面通过一个案例来学习一下表中方法的具体应用

    public class Example01 {
    
        public static void main(String[] args) {
            System.out.println("---------1.添加----------");
            add();
            System.out.println("---------2.删除----------");
            remove();
            System.out.println("---------3.修改----------");
            alter();
        }
    
        private static void add() {
            StringBuilder sb = new StringBuilder();        //定义一个字符串缓冲区
            sb.append("abcdefg");    //在末尾添加字符串
            System.out.println("append添加结果:"+sb);
            sb.insert(2, "123");
            System.out.println("insert添加结果:"+sb);
        }
    
        private static void remove() {
            StringBuilder sb = new StringBuilder("abcdefg");
            sb.delete(2, 5);    //指定删除范围
            System.out.println("删除指定范围结果:"+sb);
            sb.deleteCharAt(2);
            System.out.println("删除指定位置结果:"+sb);
            sb.delete(0, sb.length());    //清除缓冲区
            System.out.println("清除缓冲区置结果:"+sb);
        }
    
        private static void alter(){
            StringBuilder sb = new StringBuilder("abcdefg");
            sb.setCharAt(1, 'p');     //修改指定位置字符
            System.out.println("修改指定位置字符的结果:"+sb);
            sb.replace(1, 3, "qq");        //替换指定位置字符串或字符
            System.out.println("替换指定位置字符串或字符结果:"+sb);
            System.out.println("字符串反转结果:"+sb.reverse());
        }
    }

    总结

    1. String类表示的字符串是常量,一旦创建后,内容和长度都无法改变的。而StringBuilder表示字符容器,其内容和长度可以随时修改。在操作时字符串时,如果该字符串仅用于表示数据类型,则使用String类即可,但是如果需要对字符串中的字符进行增删操作,则使用StringBuilder类
    2. String类重写了Object类的equals()方法,而StringBuilder类没有重写Object类的equals()方法
    3. String类对象可以用操作符 "+" 进行连接,而StringBuilder类对象之间不能
    4. 在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。
    5. 在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。
    6. 在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer来操作字符串。

    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    jQuery常用方法一览
    基于jQuery的AJAX和JSON实现纯html数据模板
    jQuery+ASP.NET的AJAX文件上传
    jquery 新建的元素事件绑定问题
    二、visual studio 2008 快捷键
    Sql Server表相关的语句
    使用临时表
    IIS如何启用Gzip压缩功能
    php5.2 的 php.ini 中文版
    joomla笔记——对joomla的初步认识
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11673070.html
Copyright © 2011-2022 走看看