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,非科班出身的女程序猿,有木有人和我一样迷茫???