1.String、StringBuffer和StringBuilder的区别
- String和StringBuilder线程不安全,StringBuffer线程安全;
- String不可变,StringBuffer和StringBuilder可变;
- 运行效率从快到慢:StringBuilder > StringBuffer > String;(StringBuffer基本上没有差别)
- String实现了Comparable接口,StringBuffer与StringBuilder没有实现Comparable接口,因此String可以使用compareTo方法比较字符串的大小;
2.String的equals()方法
请看源码:
- 比较实际内存地址是否相同;相同则返回true
- 查看比较对象是否是String对象;不是返回false
- 比较字符串长度是否相等;不相等返回false
- 从左到右依次比较char是否相同;不相同返回false
- 返回true
3.String的compareTo()方法
请看源码:
从左到右比较两字符串的指定索引char值,若char值不同则返回char值之差
4.subString()方法
- public String substring(int beginIndex):返回索引beginIndex及其以后的字符串;举例:“abcdefg”.substring(1)返回bcdefg
- public String substring(int beginIndex, int endIndex) :返回索引为beginIndex到索引为endIndex-1的字符串;举例:
“abcdefg”.substring(1,5):返回bcde
5.String为什么不可变
- String被final修饰了,因此不可继承;
- String底层是char数组,这个数组也是final的,因此不可变;
- 此外,String的length也是final修饰