首页 > 其他 > 详细

1-20StringBuffer简介

时间:2019-02-27 21:11:59      阅读:128      评论:0      收藏:0      [点我收藏+]

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

1-20StringBuffer简介

原文:https://www.cnblogs.com/superfly123/p/10446911.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!