• 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版本加入的,是线程不安全的,效率高

  • 相关阅读:
    private key and public key
    还要谈谈Equals和GetHashcode
    B+树,聚集索引,非聚集索引(辅助索引) 之一
    由TCP的可靠性实现对比WCF中可靠性的实现(未完成)
    用TCP/IP实现自己简单的应用程序协议:最后再返回来看HTTP协议
    Socket:流,TCP连接,TCP可靠性概述
    数学归纳法与递归还有斐波那契数列(未完成)
    WCF中的REST是什么
    也谈Dependency Injection(依赖注入),依赖关系转移而不是消除(未完成)
    多线程之旅——从概念开始
  • 原文地址:https://www.cnblogs.com/superfly123/p/10446911.html
Copyright © 2020-2023  润新知