String、StringBuffer和StringBuilder

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.String类

概述

代表字符串,程序中的带双引号字符串都是String类的对象,其在java.lang包下,所以使用时不用导包。
String适用于少量的字符串操作。

String的特点

字符串不可变,值在创建后不能被更改,创建后这个值会存储在常量池中,虽然它的不可变,但可被共享,也就是说多个对象可以指向同个字符串。而字符串效果上相当于字符数组,char[ ],底层原理上是字节数组byte[ ]。

构造方法

1)直接赋值创建对象,例如 String s = “abb”。
2)根据字符数组或者字节数组内容,来创建对象,例如char [ ] chs = {‘a’, ‘b’, ‘c’};String s = new String(chs);

创建字符串对象两种方式的区别

1)构造方法
通过new创建的字符串对象,每次都会申请一个内存空间,内容相同,地址值不同。

2)直接赋值
以双引号形式给出的字符串,只要字符的顺序和大小写不变,无论出现几次,都只会建立一个String对象,并在字符串池中维护。

字符串比较

1)==的作用。基本数据类型:具体的值;引用数据类型:对象地址值。
2)equals方法的作用。比较两个字符串内容是否相同,区分大小写。

2.StringBuilder和String相互转换

1)StringBuilder转换为String
public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String。
2)String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder

3.StringBuilder和StringBuffer

1)
StringBuilder是一个(内容)可变的字符串类,可看成一个容器。和String相比,它的内容是可变的。
StringBuffer是线程安全的、可变的字符序列。
因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。
2)
StringBuffer、StringBuilder和String类似,底层也是用一个数组来存储字符串的值,并且数组默认长度为16,也就是说一个空的StringBuffer对象的数组长度为16。
创建一个StringBuffer对象也就是创建了一个大小为16个字符的字符串缓冲区。但是​当我们调用有参构造函数创建一个StringBuffer对象时,数组长度就不再是16了,而是根据当前对象的值来决定数组的长度,数组的长度为“当前对象的值的长+16”。所以一个 StringBuffer 创建完成之后,有16个字符的空间可以对其值进行修改。如果修改的值范围超出了16个字符,会先检查StringBuffer对象的原char数组的容量能不能装下新的字符串,如果装不下则会对 char 数组进行扩容。

它们的异同

String、StringBuffer和StringBuilder的异同?
相同点:底层都是通过char数组实现的
不同点:
1)
String对象一旦创建,其值是不能修改的,如果修改,会重新开辟一个内存空间来存储修改之后的对象;而StringBuffer和StringBuilder对象的值是可以被修改的;
2)
StringBuffer,带有synchronized关键字,所以线程比较安全,在多线程系统中可以保证数据同步,而StringBuillder不带有该关键字,所以线程不安全,在多线程系统中不能使用 StringBuilder。
3)
String适用于少量的字符串操作的情况;
StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况;
StringBuffer适用多线程下在字符缓冲区进行大量操作的情况;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值