对象类型的比较问题_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 对象类型的比较问题

对象类型的比较问题

 2012/2/15 9:09:25  tcrct  程序员俱乐部  我要评论(0)
  • 摘要:今日在项目中偶然发现一个问题,在权限的管理中,先取得所有的权限,再取出存在session里的权限(即个人权限),然后比较,如果有此权限则生成html代码返回页面,在开发测试时没有问题的,是由于数据量少的问题,到了实际生产时就出问题了,看代码:.....functionbuildMenuHtml(LongauthorityId,List<Authority>list)for(Authorityvo:list){if(authorityId==vo.getPid()&&
  • 标签:问题
今日在项目中偶然发现一个问题,在权限的管理中,先取得所有的权限,再取出存在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的呢?不解....
发表评论
用户名: 匿名