long a=127;
long b=123456;
long c=123456;
Long d=123456L;
Long e=123456L;
Long f=127L;
Long g=127L;
Long h= new Long(1234567);
System.out.println(a == 123); //true System.out.println(b == c); //true System.out.println(a < b); //truelong是基本数据类型,判断是否相等时使用==,即可判断值是否相等。(基本数据类型没有equals()方法)
System.out.println(f == g); //trueLong是引用数据类型,当其数值在[-128,127]之间时,能用==判断是否相等,亦可用 >、< 比较大小。
原因:java.lang.Long.java中:
private static class LongCache {
private LongCache(){}
static final Long cache[] = new Long[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Long(i - 128);
}
}
LongCache会预先缓存 [-128,127] 范围内的数,通过缓存频繁请求的值代来更好的空间和时间性能,当数据超出此范围,则new一个Long对象;
“==”是比较的地址,超出此范围的数据地址不一致,所以范围内的比较是true,范围外的数据是false。
System.out.println(d == b); //true System.out.println(d.longValue() == b); //trueLong类型可与byte,short,int,long类型直接比较
System.out.println(h > d); //true System.out.println(d < e); //false System.out.println(d == e); //false System.out.println(d.equals(e)); //true System.out.println(d.longValue() == e.longValue()); //true System.out.println(d.longValue() > f); //trueLong类型数据超出 [-128,127] 范围时,比较大小可用 >、< 比较,比较是否相等时,
可用equals()方法比较(先判断数据类型是否相同,然后判断值是否相等);
也可用longValue()方法,将Long型先转为long型,在用 == 判断是否相等。
Java的Long类在[-128,127]范围内使用缓存,导致'=='在该范围内比较返回true,超出范围则为false。推荐使用equals()或longValue()与'=='结合来比较Long对象的相等性。"
122942978,11809103,Android Face++ SDK 人脸识别与年龄检测实战,"['移动开发', 'Android', '图像处理']

1947

被折叠的 条评论
为什么被折叠?



