基础知识
- String属于引用数据类型,不属于基本数据类型。
- 随便用双引号括起来的都是String对象,String对象是final修饰的,不可以改变。
- 字符串直接存储在方法区的字符串常量池中,因为字符串在实际开发中使用太频繁,为了提高执行效率。
注意:垃圾回收器不会释放常量池的东西。
String常用的构造方法:
String s = new String("");
String s = ""; //最常用
String s = new String(char数组);
String s = new String(char数组,下标,长度);
String s = new String(byte数组);
String s = new String(byte数组,下标,长度);
String中常用到的方法:
返回值 | 方法 | 说明 |
---|---|---|
char | charAt(int index) | 返回指定索引处的值。 |
int | compareTo(String anotherString) | 按字典顺序比较两个字符串。从头开始比 |
boolean | contains(CharSequence s) | 判断前面的字符串是否包含后面的字符串。 |
boolean | endsWith(String suffix) | 判断字符串是否以某个子字符串结尾。 |
boolean | equals(Object anObject) | 判断两个字符串是否相等。 |
boolean | equalsIgnoreCase(String anotherString) | 忽略大小写,判断两个字符串是否相等 |
byte[] | getBytes() | 将字符串转换为字节数组 |
int | indexOf(String str) | 判断某个字符串在当前字符串中第一次出现处的索引。 |
boolean | isEmpty() | 判断当前字符串是否为空字符串。 |
int | length() | 返回当前字符串的长度。 |
int | lastIndexOf(String str) | 判断某字符串在当前字符串中最后一次出现的索引。 |
String | replace(CharSequence target, CharSequence replacement) | String的父接口是CharSequence。 将当前字段指定的字段替换成别的字段。 |
String[] | split(String regex) | 以regex作为分隔符,拆分当前字符串,返回字符串数组。 |
boolean | startsWith(String prefix) | 判断当前字符串是否以某个子字符串开始。 |
String | substring(int beginIndex) | 截断字符串,beginIndex为起始下标。 |
String | substring(int beginIndex, int endIndex) | 截断字符串,beginIndex为起始下标,endIndex为结束下标。 |
char[] | toCharArray() | 将字符串转换为数组 |
String | toLowerCase() | 将字符串中的字符转换为小写。 |
String | toUpperCase() | 将字符串中的字符转换为大写。 |
String | trim() | 去除字符串前后的空白部分。 |
static String | valueOf() | 将非字符串的类型转换为字符串。 |
StringBuffer:
- 当需要频繁用到拼接时,应该用StringBuffer。
- StringBuffer append()//可以用这个方法
- StringBuffer的底层初始容量为16
- 方法中都有synchronized关键字修饰,表示StringBuffer在多线程环境下是安全的。
如何优化StringBuffer的性能:
在创建StringBuffer的时候,尽可能给定一个合理的初始容量,减少底层数组扩容次数。
StringBuilder:
- 初始化容量为16。
- 在多线程环境下是不安全的。