最近在做代码审计的时候,发现了一些远古代码中的代码片段。
代码1:
Long count = queryCount()
if (count == 0) {
xxx();
}
代码2:
if(astGroup.getFid() != -1){
xxx();
}
代码3:
if(grp.getGroupId() == group.getGroupId()){
xxx();
}
我们可以很快的得出结论,上述代码中利用“==”来比较两边Long型数据大小是有些问题的。有一点点java经验的都知道“==”与“equals”的区别所在,网上也一大堆论述两者的区别,这边就不做太多论述。
稍微写一些代码测试下,
// Integer 常量池为 -128到127
Date date = new Date();
Integer a1 = 100;
Integer b1 = 100;
System.out.println("a1==b1 :"+(a1==b1) );
System.out.println("a1.equals(b1) :"+(a1.equals(b1)) );
Integer a2 = new Integer(100);
Integer b2 = 100;
System.out.println("a2==b2 :"+(a2==b2) );
System.out.println("a2.equals(b2) :"+(a2.equals(b2)) );
Integer a3 = 200-a1;
Integer b3 = 100;
System.out.println("a3==b3 :"+(a3==b3) );
System.out.println("a3.equals(b3) :"+(a3.equals(b3)) );
结果嘛,大家都应该知道的是
a1==b1 :true
a1.equals(b1) :true
a2==b2 :false
a2.equals(b2) :true
a3==b3 :true
a3.equals(b3) :true
这里涉及到常量池的概念