Long类型的id使用==比较带来的问题

场景:从数据库中查找出一条记录,返回为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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值