1.String与其他二者的区别:
String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新对象。另外二者可以在原有对象上操作,所以经常改变字符串时最好不用String。
2.StringBuffer与StringBuilder作用相同,区别是:
StringBuffer | 线程安全 | 性能较低 | 多线程推荐使用 |
StringBuilder | 非线程安全 | 性能较高 | 单线程推荐使用 |
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
3.String与StringBuffer/Stringbuilder的转换;
String->StringBuffer ; new StringBuffer(String);
StringBuffer->String; StringBuffer.toString();
4.字符串池
因为字符串是不可变的,为了提升性能;java对字符串做了特殊的处理,如果使用"字符串"形式定义一个字符串,那么将会在字符串池(String Pool)定义字符串,而不是在堆中每次创建新的字符串;
String str1 = "hello";
String str2="hello";
String str3=new String("hello");
String str4=new String("hello");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
System.out.println(str3==str4);
System.out.println(str3.equals(str4));
System.out.println(str1==str3);
System.out.println(str1.equals(str3));
输出结果:
用“”形式定义的字符串创建在池中,不会重复创建。
==比较是否是同一个对象,equals先比较是否是同一对象,若是返回true,若不是比较内容,若相同也返回true。
5.字符串常用方法
charAt():根据索引获得字符;
length():获得字符数
getBytes():获得字节数组
compareTo():与另外一个字符串比较大小,
contains(): 判断是否包含另 一个子串
equals():判断两个字符串的值是否相等 abc Abc
startsWith():是否以某个字符串开头
endsWith():是否以某个字符串结尾
replace():替换原有字符串,并返回新的
replaceAll():替换原有字符串,并返回新的(可以用正则表达式)
replaceFirst():替换第一次出现的原有字符串,并返回新的
isEmpty():判断是否是空串
substring(): 根据索引获得子串
split():根据字符进行拆分子符串
trim():去除左右空格
valueOf():将其它类型的数据转成String
StringBuffer/StringBuilder常用方法
append():追加字符串
insert():插入字符串
delete():移除子字符串
replace():替换字符串
reverse():反转字符串