定义
1 | public final class String implements java.io.Serializable, Comparable<String>, CharSequence {} |
从定义可以看出
String
被final
修饰(不允许被继承)
实现了如下接口:
Serializable
(可以序列化和反序列化)Comparable
(可以进行自定义的字符串比较)- CharSequence(一个可读序列。此接口对许多不同种类的 char 序列提供统一的只读访问。StringBuilder 和StringBuffer也实现了这个接口)
属性
1 | /** 用于存放字符串的数组 */ |
由于被final修饰,故String对象一旦初始化后,其即为不可变(指其内容不能被修改,其引用还是可以指向其他的内容)。
String
是基于char[]
实现的
频繁拼接字符串建议使用StringBuffer、StringBuilder、StringJoiner等
构造方法
构造方法
无参构造器
1 | public String() { |
即
String str = new String();
时,变量str
的值为空字符串。
一个字符串类参数构造
1 | public String(String original) { |
这个方法会产生两个字符串对象,分别为参数
original
与新创建的字符串对象。
使用字符数组构造
1 | public String(char value[]) { |
带有offset与count的重载
1 | public String(char value[], int offset, int count) { |
使用字节数组构造
1 | String(byte bytes[]); |
需要制定字符集的构造方法
1 | String(byte bytes[], Charset charset); |
使用StringBuffer
或者StringBuider
构造
很少用,因为
StringBuffer::toString()
或者StringBuider::toString()
直接就可以生成一个String对象
特殊的构造方法
1 | /* |
这个方法由Java7提供,直接饮用value[]的地址,并且
share
只能为true
提供这个方法的原因:性能好,节约空间,安全
一般方法
equals()方法
1 | public boolean equals(Object anObject) { |
一般默认是比较是否是同一个对象,此处默认重写,比较是否比较的是内容相同的两个字符串
- 比较是否是同一个对象
- 比较是否是字符串对象
- 循环比较每一位是否相同
hashCode()方法
1 | public int hashCode() { |
常规hashCode方法
substring()方法
1 | public String substring(int beginIndex, int endIndex) { |
Java 7 提供了一种新的实现方式牺牲一些性能,避免内存泄露。 Java 6 时,是同一个数组中操作。Java 7 是创建一个新的数组。
替换方法
replaceFirst、replaceAll、replace区别:
replace 的参数是 char 和 CharSequence,即可以支持字符的替换,也支持字符串的替换;
replaceAll 和 replaceFirst 的参数是 regex,即基于规则表达式的替换(如果所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果一样。)
1 | /** |