8.字符串
1.什么是String?
java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例。(程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。就是说直接写上双引号,就是字符串对象))
2.String的作用?
存储和操作数据
3.String的特点?
1.字符串是常量;它们的值在创建之后不能更改。(字符串的内容永不可变)
2.正是因为字符串不可改变,所以字符串是可以共享使用的。字符实现共享使用是通过字符串常量池实现的
3.字符串缓冲区支持可变的字符串
4.字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。(即实现字符串这个类的存储数据的数据结构是字节数组)
4.如何创建字符串?
字符串的创建有4种方式。
1.用构造方法创建(3种)
public String() 创建一个空白字符串,不含有任何内容
public String(char[] array) 根据字符数组的内容,来创建对应的字符串。
public String(byte[] array) 根据字节数组的内容,来创建对应的字符串。
2.直接创建
String str = "Hello";
String str = "";引号中间没有空格
5.String常用方法?
1.添加方法:public String concat(String str) 将当前字符串和参数字符串拼接成为返回值新的字符串。
2.删除方法:
3.查询方法:public char charAt(int index) 获取指定索引位置的单个字符。(索引从0开始。)
public int indexOf(String str) 查找参数字符串在本字符串当中首次出现的索引位置,如果没有返
回-1值
4.改变方法:public String replace(CharSequence oldString, CharSequence newString)
将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。
5.判断方法:1.public boolean equals (Object anObject) 将此字符串与指定对象进行内容比较。只有参数是一个字符串并且内容相同的才会给true;否则返回false。(string类重写了继承的equals方法,原来的equals的比较是地址,重写后的equals比较的是内容)
2.public boolean equalsIgnoreCase (String anotherString)将此字符串与指定对象进行内容比较,忽略大小写(只有英文字母区分大小写,其他都不区分大小写)。只有参数是一个字符串并且内容相同的才会给true;否则返回false。
6.属性方法:public int length() 获取字符串当中含有的字符个数,拿到字符串长度。
7.转数组方法:public char[] toCharArray() 将当前字符串拆分成为字符数组作为返回值。
public byte[] getBytes() 获得当前字符串底层的字节数组。
8.其他方法:
分割字符串的方法
public String[] split(String regex) 分割字符串的方法 按照参数的规则(split方法的参数其实是一个“正则表达式”,如果按照英文句点“.”进行切分,必须写"."(两个反斜杠)),将字符串切分成为若干部分。
字符串的截取方法
public String substring(int index) 截取从参数位置一直到字符串末尾,返回新字符串。
public String substring(int begin, int end) 截取从begin开始,一直到end结束,中间的字符串。[begin,end),包含左边,不包含右边。
6.什么是字符串常量池?
字符串常量池是堆中的一块内存区域,存储着程序当中直接写上的双引号字符串,就在字符串常量池中(其实,字符串常量保存的是该字符串对象的地址值,实际上,字符串常量池的对象被以字节数组的方式存储在堆的其他内存区域)。直接用双引号创建的字符串对象在创建对象时会先去字符串常量池看一下,当前创建的对象在字符串常量池中是否已经创建了相同对象(通过看字符串的内容来比较两个对象是否相同),如果常量池中有相同对象,就不会再创建新的对象,而是直接使用已经有的对象,如果没有就创建。程序中通过字符串构造方法new出来字符串对象都是存储在堆中其他内存区域。
7.什么是StringBuilder类?
StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。(StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种作。)
8.StringBuilder的实现原理?
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。原理如下图所示:(默认16字符空间,超过自动扩充)
9.为什么要StringBuilder类?
解决对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间问题。
10.StringBuilder类常用方法?
构造方法
public StringBuilder() 构造一个空的StringBuilder容器
public StringBuilder(String str) 构造一个StringBuilder容器,并将字符串添加进去。
成员方法
public StringBuilder append(...) 添加任意类型数据的字符串形式,并返回当前对象自身
public String toString() 将当前StringBuilder对象转换为String对象