Java中的Integer、Long等实例的比较

本文介绍了一个关于跨平台订单接单权限判断的问题。在Windows环境下,程序正常运行;但在阿里云环境下,出现错误提示。通过分析发现,问题根源在于Integer类型的比较方式不同导致。文章提供了使用equals方法进行比较的解决方案。

1.描述:

说明:ReportRepairService rrService是保修服务方法类,rrService.getReceivedUserId() != userDetail.getId()判断的是接单人员的id是否和订单中的接单人员id是否相同,

如果不相同,则打印指定的报修订单已派给他人,您无法接单。

------------------------------------------------------------------------------------------------------------------------------

ReportRepairService rrService = this.rrOrderService .findReportRepairServiceById(orderId);
                if (rrService.getReceivedUserId() != userDetail.getId()) {
                    ErrorCodeHelper
                            .Code400(dataMap, "指定的报修订单已派给他人,您无法接单。");
                }else{

                     System.out.println("接单成功");

                 }

-----------------------------------------------------------------------------------------------------------------------------------

2.问题:

这是运行在windows tomcat8.0的一段springmvc的服务器程序,在windows下本地运行是正常的打印接单成功。但是迁移到阿里云的tomcat8.0确实rrService.getReceivedUserId() != userDetail.getId()输出的永远是“指定的报修订单已派给他人,您无法接单”。也就是说rrService.getReceivedUserId() != userDetail.getId()的真值在windows和lunix系统中执行的结果是不同的。


3.问题解决:

根本原因还是不得而知。但是Java中的Integer、Long等实例的比较,需要使用equal()方法,不能使用==、!=运算符,因为Integer、Long为引用类型。
与其类似的,类比的有.NET中的Int32、Int64等变量的比较,可以使用equal()方法,也可以使用==、!=运算符,因为Int32、Int64不是引用类型,而是值类型。
所以采用.equal()方法去判断,则是会保持一样的结果,windows和lunix是一致的结果。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值