== 与 equals 的区别
● 对于基本类型,== 是比较两边的值是否相同
● 对于引用类型,== 是比较两边的引用地址是否相同,用来判断是否引用着同一对象
● equals 要看实现
○ Object.equals(Object other) 的内部实现就是 ==,即判断当前对象和 other 是否引用着同一对象
○ 比如 String,它的内部实现就是去比较两个字符串中每个字符是否相同,比较的是内容
○ 比如 ArrayList,它的内部实现就是去比较两个集合中每个元素是否 equals,比较的也是内容
String,StringBuilder 和 StringBuffer 的区别
● 它们都可以用来表示字符串对象
● String 表示的字符串是不可变的,而后两者表示的字符串是内容可变的(可以增、删、改字符串里的内容)
● StringBuilder 不是线程安全的,StringBuffer 是线程安全的,而 String 也算是线程安全的
适用场景
● 大部分场景下使用 String 就足够了
● 如果有大量字符串拼接的需求,建议用后两者,此时
○ 此字符串对象需要被多线程同时访问,用 StringBuffer 保证安全
○ 此字符串对象只在线程内被使用,用 StringBuilder 足够了
另外针对 String 类是 final 修饰会提一些问题,把握下面几点
● 本质是因为 String 要设计成不可变的,final 只是条件之一
● 不可变的好处有很多:线程安全、可以缓存等