String、StringBuilder、StringBuffer 使用、区别

目录

String

String介绍

字符串的特点

String构造方法

String 对象的特点

StringBuilder

StringBuilder介绍

StringBuilder构造方法 

StringBuilder 的添加和反转方法

String 和 StringBuilder 的区别:

StringBuilder 和 String 相互转化

StringBuffer 

构造方法

 StringBuffer 常用方法

 StringBuffer和StringBuilder区别


String

String介绍

String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例 也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象

字符串的特点

字符串不可变,它们的值在创建后不能被更改 虽然 String 的值是不可变的,但是它们可以被共享 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )

String构造方法

方法名

说明

public String()

创建一个空白字符串对象,不含有任何内容

public String(char[] chs)

根据字符数组的内容,来创建字符串对象

public String(byte[] bys)

根据字节数组的内容,来创建字符串对象

String s = “abc”; 

直接赋值的方式创建字符串对象,内容就是abc

构造方法有四种,一般比较推荐最后一种使用直接赋值的方式。

String 对象的特点

1、通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同。
 

 char[] chs = {'a', 'b', 'c'};
 String s1 = new String(chs);
 String s2 = new String(chs);

上面的代码中,JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的。

2、以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次, JVM 都只会建立一个 String 对象,并在字符串池中维护。

String s3 = "abc";
String s4 = "abc";

在上面的代码中,针对第一行代码,JVM 会建立一个 String 对象放在字符串池中,并给 s3 参考; 第二行则让 s4 直接参考字符串池中的 String 对象,也就是说它们本质上是同一个对象。

Strng常用方法太多了就不列举了,推荐使用API文档或上菜鸟教程看看。

StringBuilder

StringBuilder介绍

StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器 这里的可变指的是 StringBuilder 对象中的内容是可变的。

StringBuilder构造方法 

方法名

说明

public StringBuilder()

创建一个空白可变字符串对象,不含有任何内容(无参构造)

public StringBuilder(String str)

根据字符串的内容,来创建可变字符串对象

 以上两种方法是较为常用方法,并不是只能这两种详情可查阅API文档

StringBuilder 的添加和反转方法

方法名

说明

public StringBuilder append(任意类型)

添加数据,并返回对象本身

public StringBuilder reverse()

返回相反的字符序列

代码

public class Demo {
    public static void main(String[] args) {
        //无参构造
        StringBuilder sb1 = new StringBuilder();
        System.out.println("sb1:"+sb1);
        //带参构造
        StringBuilder sb2 = new StringBuilder("zxcccv");
        System.out.println("sb2:"+sb2);
        //内容添加:append()方法可以追加任意数据类型详细可参看JavaAPI文档
        sb1.append("xiaoxue");
        System.out.println("sb1:"+sb1);
        sb2.append("xiaohong").append(1234);//链式编程拼接字符串
        System.out.println("sb2"+sb2);
        //反转reverse()
        sb1.reverse();
        System.out.println("sb1:"+sb1);
        sb2.reverse();
        System.out.println("sb2"+sb2);

    }
}

String 和 StringBuilder 的区别:

String :内容是不可变的
StringBuildr:内容是可变的
因为String它被final关键字定义,内容就不可变。
二者相比较而言在使用时StringBuilder比String更节约时间和空间。

StringBuilder 和 String 相互转化

1. StringBuilder 转换为 String
通过 toString() 就可以实现把 StringBuilder 转换为 String。
eg:
 

public class Demo {
    public static void main(String[] args) {

        StringBuilder sb1 = new StringBuilder("abc");
        String s = sb1.toString();
        System.out.println(s);
    }
}

2. String 转换为 StringBuilder
通过构造方法就可以实现把 String 转换为 StringBuilder。
eg:

public class Demo {
    public static void main(String[] args) {
        
        String s = "hello";
        StringBuilder sb1 = new StringBuilder(s);
        System.out.println(sb1);
    }
}

StringBuffer 

构造方法

Constructor描述
StringBuffer​()

构造一个没有字符的字符串缓冲区,初始容量为16个字符。

StringBuffer​(int capacity)

构造一个没有字符的字符串缓冲区和指定的初始容量。

StringBuffer​(CharSequence seq)

构造一个字符串缓冲区,其中包含与指定的 CharSequence相同的字符。

StringBuffer​(String str)

构造一个初始化为指定字符串内容的字符串缓冲区。

 eg:

// 定义一个空的字符串缓冲区,含有16个字符的容量
StringBuffer str1 = new StringBuffer();

// 定义一个含有12个字符容量的字符串缓冲区
StringBuffer str2 = new StringBuffer(12);

// 定义一个含有(16+4)的字符串缓冲区,"新年快乐"为4个字符
StringBuffer str3 = new StringBuffer("新年快乐");
/*
*输出字符串的容量大小
*capacity()方法返回字符串的容量大小
*/
System.out.println(str1.capacity());    // 输出 16
System.out.println(str2.capacity());    // 输出 12
System.out.println(str3.capacity());    // 输出 20

 StringBuffer 常用方法

追加字符串和StringBuilder的操作相同;
替换:setCharAt() 方法用于在字符串的指定索引位置替换一个字符。该方法的语法格式如下:
StringBuffer 对象.setCharAt(int index, char ch);
eg:

StringBuffer sb = new StringBuffer("Hello");
sb.setCharAt(1,'E');
System.out.println(sb);    // 输出:HEllo
sb.setCharAt(0,'h');
System.out.println(sb);    // 输出:hEllo
sb.setCharAt(2,'w');
System.out.println(sb);    // 输出:hEwlo

反转字符串也和StringBuilder的操作相同
删除字符串,StringBuffer 类提供了 deleteCharAt() 和 delete() 两个删除字符串的方法。

1. deleteCharAt() 方法
deleteCharAt() 方法用于移除序列中指定位置的字符,该方法的语法格式如下:
StringBuffer 对象.deleteCharAt(int index);
deleteCharAt() 方法的作用是删除指定位置的字符,然后将剩余的内容形成一个新的字符串。
eg:

StringBuffer sb = new StringBuffer("abc");
sb.deleteCharAt(2);
System.out.println(sb);    // 输出:ab

2. delete() 方法
delete() 方法用于移除序列中子字符串的字符,该方法的语法格式如下:
StringBuffer 对象.delete(int start,int end);
其中,start 表示要删除字符的起始索引值(包括索引值所对应的字符),end 表示要删除字符串的结束索引值(不包括索引值所对应的字符)。该方法的作用是删除指定区域以内的所有字符。
eg:
 

StringBuffer sb = new StringBuffer("Hello Jack");
sb.delete(2,5);
System.out.println(sb);    // 输出:He Jack
sb.delete(2,5);
System.out.println(sb);    // 输出:Heck

 StringBuffer和StringBuilder区别


和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类(单线程)和 StringBuffer (多线程)之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类,然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
 

 


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值