zoukankan      html  css  js  c++  java
  • 1-20StringBuffer简介

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

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

    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);
            change(s);
            System.out.println(s);//值没有改变
    
            System.out.println("---------------------");
            StringBuffer sb = new StringBuffer();
            sb.append("StringBuffer");
            System.out.println(sb);
            change(sb);
            System.out.println(sb);
        }
    
        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版本加入的,是线程不安全的,效率高

  • 相关阅读:
    &与&&的区别
    jsp之response方法
    一个数组先按照某个属性的大小排序,如果大小一样的就按照名称排序
    CSS内部div设置上min-height或max-height滚动条就会出现在父元素上
    300行代码手写简单vue.js,彻底弄懂MVVM底层原理
    JavaScript简单手写观察者模式
    javascript中replace还可以这样玩
    VUE中通过改变key去更新局部dom
    element中select的change方法如何传多个参数
    react打包中不想要sourceMap,但是在命令里加'GENERATE_SOURCEMAP=false'后windows下报错'GENERATE_SOURCEMAP' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/superfly123/p/10446911.html
Copyright © 2011-2022 走看看