0.==和equals區(qū)別
1.基本類型只有==方法鲸湃,比較的是值帖汞。只有對(duì)象才有equals方法
2.==比較的是對(duì)象地址
3.Object的equals方法是直接返回==結(jié)果澜躺,大部分被重寫了吼虎,比較值
4.包裝類型與基本類型==比較會(huì)自動(dòng)拆箱
1.包裝類型與基本類型轉(zhuǎn)換
// 自動(dòng)裝箱,底層調(diào)用Integer.valueOf()實(shí)現(xiàn)
Integer i = 6;
// 自動(dòng)拆箱,底層調(diào)用intValue()實(shí)現(xiàn)
int i = new Integer(6)
注意點(diǎn):
1. Integer的value是用final修飾的元暴,每次賦值改變都是新的對(duì)象,可用System.identityHashCode()驗(yàn)證
2. Integer如果用new新建,是在堆上開辟空間稠氮,引用傳遞曹阔,==一定不等,如果是用=創(chuàng)建隔披,會(huì)調(diào)用valueOf方法赃份,而該方法做了一個(gè)緩存,默認(rèn)區(qū)間是【-128奢米,127】(右區(qū)間可傳值改變)抓韩,在這個(gè)范圍內(nèi)==相等,超出再new鬓长。Byte,Short,Long同樣做了【-128谒拴,127】的緩存
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
public int intValue() {
return value;
}