package com.company;
/**
* Integer的緩存數組
*/
public class CacheArr {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
Integer c = 200;
Integer d =200;
System.out.println(a==b);//true
System.out.println(c==d);//false
System.out.println(a.equals(b));//true
System.out.println(c.equals(d));//true
}
}
直接上代碼,主要是面試的時候遇到了這個問題。
查資料可以知道Integer有緩存數組,即-128<=value<=127,這個範圍的值是從緩存數組中獲取Integer對象。,除了這個範圍,Integer的“==”方法是比較地址的。而Integer的equals方法則不會有這些問題,是直接字面上的比較。
因此使用Integer做比較的時候,需要區分是否超過了緩存數組的區域。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Integer的equals方法就是簡單的值比較了,哈哈哈哈哈~~~~
不積跬步,無以至千里。。。。。。
爲啥我最近總有一種職業生涯快走到頭了的感覺??有沒有人和我一樣的困惑,對於一個非985,非211,非科班出身的女程序猿,有木有人和我一樣迷茫???