zoukankan      html  css  js  c++  java
  • 9、StringBuffer和StringBuilder

    StringBuffer简介

    StringBuffer是一个字符串缓冲区,如果需要频繁的对字符串进行拼接时,建议使用StringBuffer。
    工作原理
    StringBuffer的底层是char数组,如果没有明确设定,则系统会默认创建一个长度为16的char类型数组,在使用时如果数组容量不够了,则会通过数组的拷贝对数组进行扩容,所以在使用StringBuffer时最好预测并手动初始化长度,这样能够减少数组的拷贝,从而提高效率。

    String与StringBuffer的区别?
    String是不可变字符序列,存储在字符串常量池中
    StringBuffer的底层是char数组,系统会对该数组进行扩容

    StringBuffer的构造方法:

    package com.monkey1024.string;
    
    public class StringBufferTest01 {
    
        public static void main(String[] args) {
            //构造方法
            StringBuffer sb1 = new StringBuffer();
            //StringBuffer的初始容量
            System.out.println(sb1.capacity());
    
            //手动指定StringBuffer的长度
            StringBuffer sb2 = new StringBuffer(100);
            System.out.println(sb2.capacity());
    
            StringBuffer sb3 = new StringBuffer("monkey");
            System.out.println(sb3.capacity());//字符串的length + 16
        }
    }

    如何使用StringBuffer进行字符串拼接?

    package com.monkey1024.string;
    
    public class StringBufferTest02 {
    
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer(30);
            //调用append方法进行字符串拼接
            sb.append("www");
            sb.append(".");
            sb.append("monkey1024");
            sb.append(".");
            sb.append("com");
            System.out.println(sb);//自动调用其toString方法
            //System.out.println(sb.toString());
            sb.insert(4, "1024");//在指定位置插入字符串
            System.out.println(sb);
            sb.delete(4, 8);//删除指定位置的字符串
            System.out.println(sb);
        }
    
    }

    String作为参数传递的问题

    基本数据类型的值传递,不改变其值
    引用数据类型的值传递,改变其值

    String类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的

    package com.monkey1024.string;
    
    public class StringBufferTest03 {
    
        public static void main(String[] args) {
            String s = "String";
            System.out.println(s); //String
            change(s);
            System.out.println(s);//值没有改变 String
    
            System.out.println("---------------------");
            StringBuffer sb = new StringBuffer();
            sb.append("StringBuffer");
            System.out.println(sb); //String
            change(sb);
            System.out.println(sb); //Stringjava
        }
    
        public static void change(StringBuffer sb) {
            sb.append("java");
        }
    
        public static void change(String s) {
            s += "java";
        }
    
    }

    StringBuilder和StringBuffer的区别

    通过API可以看到StringBuilder和StringBuffer里面的方法是一样的,那他们有什么区别呢?
    StringBuffer是jdk1.0版本中加入的,是线程安全的,效率低
    StringBuilder是jdk5版本加入的,是线程不安全的,效率高

  • 相关阅读:
    MySql(二)索引的设计与使用
    Perl寻找去除数组中重复元素
    简简单单讲sort--perl
    Perl语言入门笔记 第四章 子程序
    Perl语言入门笔记 第三章 列表和数组
    Perl用CPAN安装模块时错误
    Perl PPM安装模块
    Active Perl的PPM的repository添加
    Perl的CPAN和CPANPLUS安装模块介绍
    CPANPLUS 的使用
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/10120219.html
Copyright © 2011-2022 走看看