定义
-
java.lang.String
-
String类代表字符串,Java程序中的所有字符串文字(如:“abc”)都被实现为此类的实例
-
String类包括用于检查序列的各个字符的方法,用于比较字符串,搜索字符串,提取子字符串以及创建将所有字符翻译为大写或小写的字符串的副本
-
字符串不变;,它们的值在创建后不能被更改,因为String对象是不可变的,但它们可以被共享,如:
-
底层由char实现,一个汉字占一个字符
String str = "abc";
//相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
String、StringBuffer、StringBuilder区别
名称 | 描述 |
---|---|
String | 不可变字符序列(值不可变),每次对String对象操作都生成新的对象,适用于操作少量数据 |
StringBuffer | 可变字符序列,字符串缓冲区,线程安全,适用于多线程操作大量数据 |
StringBuilder | 可变字符序列,线程不安全(不能同步访问),但执行速度快 ,适用于单线程操作大量数据 |
String类常用方法
方法名 | 描述 |
---|---|
length() | 返回此字符串对象的长度,区分于length (后无括号,返回String字符串数组的长度) |
isEmpty() | 字符串为空值时(即长度为0),返回true |
charAt(int index) | 返回char指定索引处的值,指数范围为0至length() - 1 |
equals() | 将此字符串与指定对象进行比较,不能为null |
toCharArray() | 将此字符串转换为新的字符数组 |
valueOf() | 返回参数形式的字符串 |
compareTo() | 按字典顺序比较两个字符串,字符串对象(多个字符则为最小索引处的字符)在参数字符串-之前返回负数,相等返回0,之后返回正数 |
hashCode() | 返回此字符串的哈希码 |
indexOf() | 返回指定字符第一次出现的字符串内的索引 |
lastIndexOf() | 返回指定字符的最后一次出现的字符串中的索引 |
substring(int beginIndex,int endIndex) | 截取字符串,beginIndex至endIndex - 1 |
replace(char oldChar,char newChar) | 字符串替换 |
contains(CharSequence s) | 当且仅当此字符串包含指定的char值序列时才返回true |
concat(String str) | 将指定的字符串连接到该字符串的末尾 |
split(String regex,int limit) | 将此字符串拆分为给定的regular expression的匹配,如果极限limit > 0,则模式最多应用n -1次,数组的长度不大于n ,数组的最后一个条目将包含超出最后一个匹配分隔符的所有输入。 如果n < 0,那么模式将被应用到尽可能多的次数,并且数组可以有任何长度。 如果n = 0,则模式将被应用尽可能多次,数组可以有任何长度,并且尾随的空字符串将被丢弃,limit参数可不用(则默认为0,尾随的空字符串不会包含在结果数组中)。 |
join(CharSequence delimiter,CharSequence… elements) | 第一个参数为分隔符,第二个为要加入的元素 |
codePointAt(int index) | 返回指定索引处的字符的Unicode代码点,指数范围为0至length() - 1 |
codePointBefore(int index) | 返回指定索引处前一个字符的Unicode代码点 |
equalsIgnoreCase() | 将此字符串与指定对象进行比较,忽略大小写 |
compareToIgnoreCase() | 比较…忽略大小写 |
startsWith(String prefix,int toffset) | 测试在指定索引处开始的此字符串的子字符串是否以指定的前缀开头,toffset:在哪里开始查找 |
endsWith(String suffix) | 测试此字符串是否以指定的后缀结尾 |
toLowerCase() | 转换为小写 |
toUpperCase() | 转换为大写 |
trim() | 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格 |
toString() | 返回字符串对象本身 |
intern() | 返回字符串对象的规范化表示形式 |
new String()、" "、null 的区别
- isEmpty()使用的前提是字符串对象已经被分配了内存空间,如果对象没有被分配空间而使用isEmpty()报空指针错误
String a = new String();
String b = " ";
String c = null;
- a 被分配了内存空间且值为空,是一种有值的绝对空;
- b 被分配了内存空间且值为空字符串,是一种有值的相对空;
- c 未分配内存空间且无值,是一种无值状态,空指针。