[Java基础]String、StringBuffer、StringBuilder区别

String、StringBuffer、StringBuilder区别

String:不可变,线程安全的,效率低。
StringBuffer:可变,线程安全的,效率低。
StringBuilder:可变,线程不安全,效率低。(用法与StringBuilder基本一致)

String

  1. String对象的值为什么不能修改?
    String的底层是final修饰的cahr[]。
    在这里插入图片描述
  2. 在String中空不等于Null。
    Null是引用的内容不存在(不指向任何对象),不指向任何对象。
    空是指引用指向某个对象,但是对象的内容为空。
    在这里插入图片描述

String方法:

方法描述
public String()创建一个空的字符串对象
public String(String value)创建一个值为value的字符串对象
public String(char value[])将一个char数组转换为字符串对象
public String(char value[],int offset,int count)将一个指定范围的char数组转换为字符串对象(count为截取长度)
public String(byte value[])将一个byte数组转换为字符串对象
public String(byte value,int offset,int count)将一个指定范围的byte数组转换为字符串对象(count为截取长度)
public int length()获取字符串的长度
public boolean isEmpty()判断字符串是否为空
public char charAt(int index)返回指定下标字符
public byte[] getBytes()返回字符串对应的byte数组
public boolean equals(Object o)判断两个字符串值是否相等
public boolean equalsIgnoreCase(Object o)判断两个字符串是否相等(忽略大小写)
public int compareTo(String value)比较两个字符串,返回差值
public int compareToIgnoreCase(String value)比较两个字符串,返回差值(忽略大小写)
public boolean startWith(String value)判断字符是否以value开头
public boolean endWith(String value)判断字符是否以value结尾
public int hashCode()返回哈希值
public int indexOf(String str)返回下标
public int indexOf(String str,int formIndex)从指定位置开始查找下标
public String subString(int beginIndex)从指定位置开始截取字符串
public String subString(int beginIndex,int endIndex)截取指定区间的字符串
public String concat(String str)追加字符串
public String replaceAll(String o,String n)将字符串中所有o替换为n
public String[] split(String regex)用指定字符分割,返回数组
public String toLowerCase()转小写
public String toUpperCase()转大写
public char[ ] toCharArray()将字符串转为字符数组

StringBuffer

StringBuffer可以解决String频繁修改造成的空间资源浪费问题。
StringBuffer线程安全,效率低。StringBuilder线程不安全,效率高。
StringBuffer的底层也是字符数组来存值
在这里插入图片描述

  • StringBuffer的默认数组长度为16(无参)

    public StringBuffer() {
        super(16);
    }
    
  • 使用有参的长度为值得长度+16

    public StringBuffer(String str) {
        super(str.length() + 16);
        append(str);
    }
    

注意:

  • StringBuffer并没有重写Object类的equals方法,即比较方式与“==”一样
  • StringBuffer的length()方法输出的是值所占的长度
  • 如果追加的字符串超出现有长度,则会将数组扩容,不更换对象,内部调用父类方法ensureCapacityInternal()方法对数组进行扩容。

方法:

方法描述
publice String Buffer()创建一个空的StringBuffer对象
public StringBuffer(String str)创建一个值为str的StringBuffer对象
public synchronized int length()返回数组中数据的长度
public synchronized int char charAt(int index)返回指定位置的字符
public synchronized StringBuffer append(String str)追加内容
public synchronized StringBuffer delete(int start,int end)删除指定区间的值
public synchronized StringBuffer deleteCharAt(int index)删除指定位置字符
public synchronized StringBuffer raplace(int start,int end,String str)将指定区间的值替换成str(指定区间长度可以与str长度不相等)
public synchronized StringBuffer substring(int start)从指定位置开始截取字符串
public synchronized StringBuffer substring(int start,int end)从指定区间开始截取字符串
public synchronized StringBuffer insert(int offset,String str)在指定位置插入str
public int indexOf(String str)从头开始查找指定字符的位置
public int indexOf(String str,int fromIndex)从fromIndex开始查找指定字符位置
public synchronized StringBuffer reverse()进行反转
public synchronized String toString()转为String
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值