1、字符串不变性
查看源码发现:
String是一个final类,且3个成员都是私有的,这就意味着String是不能被继承的,
这就防止出现:程序员通过继承重写String类的方法的手段来使得String类是“可变的”的情况
(1)final类 和 final的私有成员
(2)改变即创建对象的方法
2、equals()方法、hashCode()放法的区别
HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于:
如果两个对象相等(equal),那么他们一定有相同的哈希值。
如果两个对象的哈希值相同,但他们未必相等(equal)。
为什么要选31作为乘数呢?
31是一个不大不小的质数,是作为 hashCode 乘子的优选质数之一。
31可以被 JVM 优化,31 * i = (i << 5) - i。