在最近的开发中,我发现包装类存在一个问题
public class test {
public static void main(String[] args) {
Long l =100l;
Long l2 =100l;
System.out.println(l==l2);
Long l3 = 128l;
Long l4 = 128l;
System.out.println(l3==l4);
}
}
输出的结果是:
true
false
原因是:Long 会为数据创建一个初始打小为1个字节(大小为-128~127)的空间存放0或1的二进制的数据,但是当超过这个容量时,他会重新创建数据的容量在堆内存中new出来,我之所以说他很坑,还是因为小编没过多的了解底层的实现原理,导致了小编在数据Id比较时出错,本地的数据源ID值都比较小,实地服务器上的数据却很大,小编我可谓是煞飞苦心呀,发现了这个问题,之后人都傻掉了,原来是这样的错误,还有一个就是在集合中可能用到
public class test {
public static void main(String[] args) {
List<Long> list = new ArrayList();
Long l =100l;
Long l2 =100l;
list.add(l);
list.add(l2);
System.out.println(list.get(0)==list.get(1));
Long l3 = 128l;
Long l4 = 128l;
list.add(l3);
list.add(l4);
System.out.println(list.get(2)==list.get(3));
}
}
输出时:
true
false