简介
Java中的String表示不可变的字符串,这就意味着String对象一旦被创建,其值不能被改变,这跟String类的底层实现原理有关,后面会对其底层数据结构进行简单剖析。
由于String对象不允许被改变,因此String对象在内存中是共享的,例如:
// 内存中只有一个"abc"对象被创建,s1和s2都指向这个对象
String s1 = "abc";
String s2 = "abc";
底层数据结构
String类是一个被final
修饰的类,这就意味着String类不能被继承,String类的底层数据结构为final
修饰的字符数组,因此,String对象不允许被修改。
public final class String extends Object implements Serializable, Compare<String>, CharSequence {
// 字符数组,被final修饰
private final char value[];
// 可序列化标识
static final long serialVersionUID = -6849794470754667710L;
// ...
}
1)String类实现了Serializable接口,可以被序列化与反序列化
2)String类实现了Compare<String>接口,可以进行对象的比较
3)String类实现了CharSequence接口,表示一个有序的字符序列
构造方法
String类的构造方法很多,这里列举一些常见的构造方法。
构造方法 | 描述 |
---|---|
String() | 创建一个空字符串对象 |
String(byte[] bytes) | 使用字节数组来创建一个String对象 |
String(char[] value) | 使用字符数据来创建一个String对象 |
String(String original) | 使用String对象来创建一个新的String对象,新创建的字符串是参数的副本 |
String(StringBuffer buffer) | 使用StringBuffer对象来创建一个新的String对象 |
String(StringBuilder builder) | 使用StringBuilder 对象来创建一个新的String对象 |
操作API
1. “获取” 相关的API
(1) length()
返回字符串的长度
int length()
(2) charAt()
获取指定位置的字符
char charAt(int index)
(3) indexOf()
获取指定字符或者字符串第一次出现的位置索引
// 获取指定字符第一次出现的位置索引
int indexOf(int ch)
// 获取指定字符第一次出现的位置索引,但是从指定的start位置开始
int indexOf(int ch, int start)
// 获取指定字符串第一次出现的位置索引
int indexOf(String str)
// 获取指定字符串第一次出现的位置索引,但是从指定的start位置开始
int indexOf(String str, int start)
(4) lastIndexOf()
获取指定字符或者字符串最后一次出现的位置索引
// 获取指定字符最后一次出现的位置索引
int lastIndexOf(int ch)
// 获取指定字符最后一次出现的位置索引,但是从指定的start位置开始
int lastIndexOf(int ch, int start)
// 获取指定字符串最后一次出现的位置索引
int lastIndexOf(String str)
// 获取指定字符串最后一次出现的位置索引,但是从指定的start位置开始
int lastIndexOf(String str, int start)
(5) substring()
获取子串
// 左闭右开区间
String substring(int start)
String substring(int start, int end)
2. “转换”相关的API
(1) toLowerCase()
将字符串全部转换为小写
String toLowCase()
(2) toUpperCase()
将字符串全部转换为大写
String toUpperCase()
(3) toCharArray()
将字符串转换为字符数组
char[] toCharArray()
(4) getBytes
将字符串转换为字节数组
// 按照指定的编码方法将字符串转换为字节数组
byte[] getBytes(String charsetName)
(5) split()
将字符串按照指定的正则切割为字符串数组,注意: .
、 $
、 |
和 *
等转义字符,必须得加 \\
进行转义。
String[] split()
(6) replace()
将指定的字符或者字符串进行替换
// 字符替换
String replace(char oldChar, char newChar)
// 字符串替换,CharSequence 说白看就是字符串
String replace(CharSequence target, CharSequence replacement)
(7) replaceAll()
基于正则表达式的替换
String replaceAll(String regex, String replacement)
(8) trim()
删除字符串前后的空白符
String trim()
3. “判断” 相关的API
(1) isEmpty()
判断字符串是否为空串,即length为0
boolean isEmpty
4.数据类型转换相关的API
(1) valueOf()
返回指定对象的字符串形式
String valueOf(boolean b)
String valueOf(int i)
String valueOf(long l)
String valueOf(float f)
String valueOf(double d)
String valueOf(char ch)
String valueOf(char[] data)
网友评论