1、如果是在循环中对String对象进行连接,应该直接使用StringBuilder代替String的”+”连接,这样可以提高性能。
2、对于编译时常量,在编译后直接计算出字符串的值,而不会再运行时创建临时的StringBuilder对象来完成字符串连接。
3、String对象是不可变的。因为String类是final类型的,我们无法继承该类。
4、String类那些看似修改字符序列的方法实际上都是返回新创建的String对象,而不是修改自身对象。
5、由于String对象是不可改变的,因此其具有线程安全性,可以自由地实现共享。
6、在String类内部,是使用一个字符数组(char[])来维护字符序列的。
7、从Object类继承的equals方法与“==”运算符的比较方式是相同的。如果继承的equals方法对我们自定义的类不适用,则可以重写equals方法。
8、equals有五条规则:
- 自发性
- 对称性
- 传递性
- 一致性
- 对于任何非空引用值x,x.equals(null)应返回false。
在重写时必须遵守这五条规则,否则该类与其他类交互时,会发生错误。
9、在重写equlas时,必须也要重写hashCode方法。
10、String s1=new String(“abc”);和String s2=”abc”;是不一样处理方式的。后者如果有s3=”abc”,s2==s3是true。
11、当String对象调用intern方法时,如果常量池中已经含有该对象(通过equals方法来判断),则返回常量池中的String对象。如果不存在,则将该对象加入常量池中,并返回该对象。
12、程序中出现String编译时常量(String字面常量与String常量表达式)时,会自动调用intern放安抚。然而运行时创建的String对象,会分配到堆中。