JAVA面试基础

JAVA面试部分重点内容

四、String和StringBuffer

  1.说说String的常用方法?

方法描述
public String[ ]创建一个空的字符串对象
public String(String value[ ])创建一个值为value的字符串对象
public String(char value[ ])将一个char数组转换为字符串对象
public String(char value[ ],int offset,int count)将一个制定范围的char数组转换为字符串对象
public String(byte value[ ])将一个byte数组转换为字符串对象
public String(byte value[ ],int offset,int count)将一个制定范围的byte数组转换为字符串对象
public int length()获取字符串的长度
public boolean isEmpty()判断字符串是否为空
public char charAt(int index)返回指定下标的字符
public byte[ ] getBytes()返回字符串对应的byte数组
public boolean equals(Object anObject)判断两个字符串的值是否相等
public boolean equalsIgnoreCase(Object anObject)判断两个字符串值是否相等(忽略大小写)
public int compareTo(String value)对字符串进行排序
public int compareToIgnoreCase(String value)忽略大写进行排序
public boolean startWith(String value)判断字符串是否以value开头
public boolean endsWith(String value)判断字符串是否以value结尾
public int hashcode()返回字符串的hash值
public int indexOf(String str)返回str在字符串中的下标
public int indexOf(String str,int fromIndex)从指定位置查找字符串的下标
public String subString(int beginIndex)从指定位置开始截取字符串

  null和空是两个概念,null是指对象不存在,引用地址为空。

  2.说说String和StringBuffer的区别?

  String对象一旦创建,值不能修改(原来的值不能修改,一旦修改就是一个新的对象)修改之后会重新开辟内存空间来存储新的对象,会修改String的引用。因为String底层是用数组来存储的,数组长度一旦创建就不可修改,所以导致上述问题。StringBuffer可以解决String频繁改造的空间资源浪费的问题
在这里插入图片描述

  • StringBuffer数组的默认长度是16,使用无参构造函数来创建对象。
 @HotSpotIntrinsicCandidate
    public StringBuffer() {
        super(16);
    }
  • 使用有参构造函数,数组的长度=值的长度+16。
    @HotSpotIntrinsicCandidate
    public StringBuffer(String str) {
        super(str.length() + 16);
        this.append(str);
    }

  3.说说StringBuffer的字符串长度大于16,如何处理?

  StringBuffer不会重新开辟一块新的内存区域,而是在原有的基础上进行扩容,通过调用父类ensureCapacityInternal()方法对底层数组进行扩容,保持引用不变。

    private void ensureCapacityInternal(int minimumCapacity) {
        int oldCapacity = this.value.length >> this.coder;
        if (minimumCapacity - oldCapacity > 0) {
            this.value = Arrays.copyOf(this.value, this.newCapacity(minimumCapacity) << this.coder);
        }

    }

  4.说说StringBuffer的常用方法?

方法描述
public StringBuffer()创建一个空的StringBuffer对象
public StringBuffer(String str)创建一个值为str的StringBuffer对象
public synchronized int length()返回StringBuffer的长度
public synchronized 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 replace(int start,int end,String str)将指定区间的值替换成str
public synchronized String substring(int start)截取字符串从指定位置到结尾
public synchronized String substring(int start,int end)截取字符串从start开始,到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

  读取数据不需要考虑线程安全问题,因为这种操作不存在线程安全隐患。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值