String类面试题、StringBuilder类

本文主要内容:

(1)String的不可变性
(2)StringBuilder类
(3)StringBuilder与StringBuffer的区别

1.String类笔试题:
(1)String的不可变性

//源码
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
    //在String类中包含一个数组,private final char[] value;
    //存储String中的每一个字符,final——>地址不让改变,数组的长度本身不可变
    //private->数组中的内容也不能改变
    .....

体现在两个方面:长度和内容。长度——>final修饰的数组,数组的长度本身不变,final修饰的数组地址也不变;内容——>用private修饰的属性,不能在类的外部访问。
(2)String str = “a”+“b”+“c”+“d”;
System.out.println(str);在这个过程中产生了几个String对象?字符串常量池7个
2.StringBuilder类
由于String类有不可变特性,频繁的修改其内容,性能很不好
(1)所属的包:java.lang包
(2)默认继承Onjrct,实现接Serializable,CharSequence,Appendable;
StringBuffer/StringBuilder没有comapreTo()方法;StringBuffer/StringBuilder含有一个String没有的方法append();拼接
(3)特性:可变字符串,char[] value;动态扩容
(4)对象的构建:无参构造方法、有参构造方法

StringBuilder builder = new StringBuilder();
//无参构造方法,构建一个默认长度为16个空间的对象
StringBuilder builder = new StringBuilder(20);
//利用给定的参数,构建一个自定义长度的空间的对象
StringBuilder builder = new StringBuilder("abc");
//利用String带参数构造方法,默认数组长度为字符串长度+16

(5)StringBuilder中常用的方法
最主要的方法:append();频繁的拼接字符串的时候使用此方法,提高性能
ensureCapacity(int minimumCapacity);确保底层数组容量够用
capacity();字符串底层char[]的容量
length();字符串的有效元素的个数
char = charAt(int index);返回下标所对应的字符
int = codePointAt(int index);返回下标对应字符的code码
String = subString(int start,int end);注意接收返回值,截取出新字符串的效果
StringBuilder = delete(int start,int end);StringBuilder类中独有的方法String类并没有,将start到end之间的字符串删除掉,不用接受返回值就看到效果
StringBuilder = deleteCharAt(int index);String类无此方法,将给定的index位置的某一个字符删除掉
int = indexOf(String str,[int fromIndex]);
int last = lastIndexOf(String str,[int fromIndex]);
找寻字符串第一次或者最后一次出现的位置
insert(int index,char value);将给定的value插入到index位置之上
replace(int start,int end,String str);将start与end之间的部分替换为str
setCharAt(int index,char value);将index位置的字符改为给定的value
toString();将StringBuilder对象构建成一个String对象返回
trimToSize();将数组无用的容量去掉,编程length长度的数组
3.StringBuilder类面试题
(1)String和StringBuilder区别|String和StringBuffer区别
String:不可变字符串;JDK1.0之后;有一个接口Comparable;不可变体现在长度及内容;有一些方法StringBuilder没有,例如concat、compareTo、toUpperCase方法
StringBuilder:可变字符串;JDK1.5之后;有一个接口Appendable;可变字符串:没有final修饰,底层可以进行数组扩容;有一些方法String没有,例如:append,insert,delete,reverse方法
(2)StringBuffer和StringBilder的不同
StringBuffer早期版本1.0
StringBuilder后来的版本1.5
早期版本:线程同步,安全性比较高,执行效率相对较低
后期版本:线程非同步,安全性比较低,执行效率相对较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值