对象类型的比较问题

今日在项目中偶然发现一个问题,在权限的管理中,先取得所有的权限,再取出存在session里的权限(即个人权限),然后比较,如果有此权限则生成html代码返回页面,在开发测试时没有问题的,是由于数据量少的问题,到了实际生产时就出问题了,看代码:


.....
function buildMenuHtml(Long authorityId ,List<Authority> list)
for(Authority vo : list){
if(authorityId == vo.getPid() && authMap.catxxKey(vo.getName())){ //如果有权限
//生成菜单代码
....
}
}
...


以上的vo.getPid()取出来的是一个Long,在测试时是可以正常生成代码的。但录入数据时,到了131这个数时就出现问题了,于是,就努力甘打印出来


System.out.println(id+" "+vo.getPid());
System.out.println((id==131L)+" "+(vo.getPid()==131L));
System.out.println(id==vo.getPid());
打印的结果 为:
131 131
true true
false


竟然打印出来都是131为什么会是false?正在不解的时候,突然看到authorityId是Long类型数据来的,也就是说是一个对象,用==的话当然系唔相等啦,哎,杯具一下,竟然将这个甘基础的也忘记了。
于是想,打印出hashcode出来看看,是否hashcode不一样的,结果,是一样的,因为用equals来比较的话也是一样的,所以hashcode也是一样,但我想要看看它们的在堆中的内存地址又应该如何看呢?由以上代码得知,它们的内存地址一定是不一样的。于是上网搜了一翻,发现可以用这个:

System.identityHashCode(obj);


但为什么在131之前那些比较又会是一样的呢?返回 的结果是true的呢?不解....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值