先了解两个知识点
1.==与equals()
如果等式两边是基本数据类型,是值的比较
如果等式两边是对象,是对象地址的比较
equals():
对于Object对象,就是比较对象的地址:
public boolean equals(Object obj) {
return (this == obj);
}
对于Integer对象,对equals()方法进行了重写,改成了值的比较:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
很多对象都对equals()方法进行了重写,所以不同对象,==与equals()是否相等,要去看相关对象的equals()的内容
2.JVM的常量池
对Integer类型来说,第一次使用时加载缓存,默认缓存-128到127的数字
到JVM的常量池中
/**
*The cache is initialized on first usage
*/
private static class IntegerCache {