概述
String类表示字符串,Java程序中的所有字符串文字(例如”abc” )都实现为此类的实例。
字符串(String)是不变的; 它们的值在创建后无法更改。 字符串缓冲区(StringBuffer和StringBuilder)支持可变字符串。之所以会产生这样的区别是因为String类储存在方法区中(现在叫元空间),字符串缓冲区储存在堆中。
需要注意的是:我们在使用String类时,每一个操作都会产生一个新的String类,尤其是在使用多个”+”号多个字符串相连时,会产生很多String类的中间值,这些值虽然没有引用,但由于String类储存在元空间中,这些中间值不会被回收,所以在大量使用字符串连接符时用字符串缓冲区会更节省内存。
另外,API中还有这样一句话:因为String对象是不可变的,所以可以共享它们。这句话是说如果两个字符串的值一样,就视为同一个字符串,观察下列代码:
public static void main(String[] args) {
String str1 = "abcd";
String str2 = "abcd";
System.out.println(str1 == str2);
}
运行结果是:true,这里的“==”比较的并不是str1和str2的值,而是两者的地址,说明这两者的地址一样,这是因为在创建str2的时候会自动的在内存中去找有没有值为“abcd”的字符串,内存中有“abcd”字符串,与是就直接引用str1的地址,不再创建一个对象。
如果要新创建一个字符串,就要采用new的方法:
public static void main(String[] args) {
String str1 = "abcd";
String str2 = new String("abcd");
System.out.println(str1 == str2);
}
这里运行结果为:false,说明两者的地址不一样了
String的构造方法
构造器 | 描述 |
---|---|
String() | 初始化新创建的 String对象,使其表示空字符序列。 |
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组构造新的 String 。 |
String(byte[] ascii, int hibyte) | 已过时。 此方法无法将字节正确转换为字符。 |
String(byte[] bytes, int offset, int length) | 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。 |
String(byte[] ascii, int hibyte, int offset, int count) | 已过时。 此方法无法将字节正确转换为字符。 |
String(byte[] bytes, int offset, int length, String charsetName) | 通过使用指定的字符集解码指定的字节子 String构造新的 String 。 |
String(byte[] bytes, int offset, int length, Charset charset) | 通过使用指定的charset解码指定的字节子String构造新的String 。 |
String(byte[] bytes, String charsetName) | 构造一个新的String由指定用指定的字节的数组解码charset 。 |
String(byte[] bytes, Charset charset) | 构造一个新的String由指定用指定的字节的数组解码charset 。 |
String(char[] value) | 分配新的 String ,使其表示当前包含在字符数组参数中的字符序列。 |
String(char[] value, int offset, int count) | 分配一个新的 String ,其中包含字符数组参数的子数组中的字符。 |
String(int[] codePoints, int offset, int count) | 分配新的 String ,其中包含 Unicode code point数组参数的子数组中的字符。 |
String(String original) | 初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。 |
String(StringBuffer buffer) | 分配一个新字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。 |
String(StringBuilder builder) | 分配一个新字符串,其中包含当前包含在字符串构建器参数中的字符序列。 |
String类的常用方法
变量和类型 | 方法 | 描述 |
---|---|---|
char | charAt(int index) | 返回指定索引处的 char值。 |
int | codePointAt(int index) | 返回指定索引处的字符(Unicode代码点)。 |
int | codePointBefore(int index) | 返回指定索引之前的字符(Unicode代码点)。 |
int | codePointCount(int beginIndex, int endIndex) | 返回此 String的指定文本范围内的Unicode代码点数。 |
int | compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
int | compareToIgnoreCase(String str) | 按字典顺序比较两个字符串,忽略大小写差异。 |
String | concat(String str) | 将指定的字符串连接到此字符串的末尾。 |
boolean | contains(CharSequence s) | 当且仅当此字符串包含指定的char值序列时,才返回true。 |
static String | copyValueOf(char[] data) | 相当于 valueOf(char[]) 。 |
static String | copyValueOf(char[] data, int offset, int count) | 相当于 valueOf(char[], int, int) 。 |
boolean | endsWith(String suffix) | 测试此字符串是否以指定的后缀结尾。 |
boolean | equals(Object anObject) | 将此字符串与指定的对象进行比较。 |
boolean | equalsIgnoreCase(String anotherString) | 将此 String与另一个 String比较,忽略了大小 |
byte[] | getBytes() | 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。 |
int | hashCode() | 返回此字符串的哈希码。 |
int | indexOf(int ch) | 返回指定字符第一次出现的字符串中的索引。 |
int | indexOf(int ch, int fromIndex) | 返回指定字符第一次出现的此字符串中的索引,从指定索引处开始搜索。 |
int | indexOf(String str) | 返回指定子字符串第一次出现的字符串中的索引。 |
int | indexOf(String str, int fromIndex) | 从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。 |
String | intern() | 返回字符串对象的规范表示。 |
int | lastIndexOf(int ch) | 返回指定字符最后一次出现的字符串中的索引。 |
int | lastIndexOf(int ch, int fromIndex) | 返回指定字符最后一次出现的字符串中的索引,从指定的索引开始向后搜索。 |
int | lastIndexOf(String str) | 返回指定子字符串最后一次出现的字符串中的索引。 |
int | lastIndexOf(String str, int fromIndex) | 返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索。 |
int | length() | 返回此字符串的长度。 |
String | repeat(int count) | 返回一个字符串,其值为此字符串的串联重复 count次。 |
String | strip() | 返回一个字符串,其值为此字符串,并删除了所有前导和尾随 white space 。 |
String | stripLeading() | 返回一个字符串,其值为此字符串,并删除了所有前导 white space 。 |
String | stripTrailing() | 返回一个字符串,其值为此字符串,并删除所有尾随 white space 。 |
char[] | toCharArray() | 将此字符串转换为新的字符数组。 |
static String | valueOf(boolean b) | 返回 boolean参数的字符串表示形式。 |
static String | valueOf(char c) | 返回 char参数的字符串表示形式。 |
static String | valueOf(char[] data) | 返回 char数组参数的字符串表示形式。 |
static String | valueOf(char[] data, int offset, int count) | 返回 char数组参数的特定子数组的字符串表示形式。 |
static String | valueOf(double d) | 返回 double参数的字符串表示形式。 |
static String | valueOf(float f) | 返回 float参数的字符串表示形式。 |
static String | valueOf(int i) | 返回 int参数的字符串表示形式。 |
static String | valueOf(long l) | 返回 long参数的字符串表示形式。 |
static String | valueOf(Object obj) | 返回 Object参数的字符串表示形式。 |
String、StringBuffer和StringBuilder的区别
- String是不可变类,StringBuffer和StringBuilder是可变类。
- StringBuffer是线程安全的,因为它相关方法都加了synchronized 关键字,StringBuilder线程不安全。
版权声明:本文为qq_44961030原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。