场景:从数据库中查找出一条记录,返回为A对象,A对象的id变量为Long类型,该id值为1373995515313754114。现在控制器接收一个Long类型的参数demandId,值同样为1373995515313754114,此时在Service层有个条件判断恰好是要比较A.id与demandId是否相当。这个时候条件反应使用了if(A.id == demandId);该条件判断即使是两个值是相等的也会返回false。
原因:Long类型是包装类型,==比较符号比较的是两个对象的地址值,从而导致始终返回false,这里应该使用if(demandId.equals(A.id));因为Long包装类型重写了equals()方法,使其比较的是对象的内容,而不是对象的地址值。
思考:这是面试过程中经常碰到的问题,虽然问起==符号和equals方法的时候知道两者的区别,但是由于实际开发经验欠缺,还是会忽略掉一些知识点,导致会出现bug,这要是出现在工作中,年终奖应该直接没了。
补充,理解null和""的区别
if("1".equals(1)){ //这里数值1其实对应着ASCII表的49
System.out.println("1-ture");
}else {
System.out.println("1-false"); //false
}
String str = new String();
if(StringUtils.isEmpty(str)){
System.out.println("StringUtils.isEmpty(str)"); //StringUtils.isEmpty(str)
}
if(str == "" || str == null){
System.out.println("s == \"\" || s == null");
} else {
System.out.println("false"); //false
}
if (Optional.ofNullable(str).isPresent()){
System.out.println("aa"); //aa
}
//String s = new String();
//此时的s是个不为null的字符串实例,默认值为“”。
关于Null和"",参考博客:https://blog.csdn.net/m0_37374307/article/details/104605244