1.String
-
String本质
String是不可变的,他的实质是被final修饰过的char数组。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
-
String方法
编号 | 方法 | 说明 |
---|---|---|
1 | char charAt(int index) | 返回指定索引处的 char 值。 |
2 | int compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
3 | boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束。 |
4 | byte[] getBytes() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
5 | int length() | 返回此字符串的长度。 |
6 | boolean matches(String regex) | 告知此字符串是否匹配给定的正则表达式。 |
7 | String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
8 | String[] split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
9 | String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的一个子字符串。 |
10 | char[] toCharArray() | 将此字符串转换为一个新的字符数组。 |
11 | String trim() | 返回字符串的副本,忽略前导空白和尾部空白。 |
-
有关String的面试题
String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆内存中
System.out.println(s1==s2); // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true
2.StringBuilder与StringBuffer
-
简短介绍
String:字符串常量,字符串长度不可变。用于存放字符的数组被声明为final。
StringBuffer:字符串变量(Synchronized,即线程安全)。可将字符串缓冲区安全地用于多个线程。
StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
-
使用选择
- 如果要操作少量的数据用 String,大量操作使用StringBuffer 和 StringBuilder 是因为能够被多次的修改,并且不产生新的未使用对象。
- 单线程大量操作数据用StringBuilder,它的速度大于StringBuffer。
- 多线程大量操作数据用StringBuffer,但是stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确,所以并不常用。
-
StringBuilder操作小案例
StringBuildera=newStringBuilder("");
a.append("i'm a good boy");//附加
System.out.println(a.toString());
a=a.reverse();//翻转
System.out.println(a.toString());
a.delete(0,1);//删除
System.out.println(a.toString());
a.insert(0,"ha");//插入
System.out.println(a.toString());
a.replace(1,2,"666");//替换
System.out.println(a.toString());
对应结果
i'm a good boy
yob doog a m'i
ob doog a m'i
haob doog a m'i
h666ob doog a m'i