对java5的新特性不可太过依赖。。。

        我们项目中要用到分页,由于项目组是新组建的,没又任何现成的代码可用,编程人员也都经验不足,又比较赶进度,所以没有建立一个稳定健壮高效复用性高的分页算法,而是把分页代码写在了每个jsp页面上,说到分页,自然要用到页码什么的,听闻java5的基本类型的包装类是支持自动封装和自动解封的,而我们的编码人员也想试试看这自动封装和自动解封到底有多奇妙,于是涉及到页码的变量全使用了Integer类型,于是就有了下面的代码:

 Integer currentPage = 0;
 currentPage = Integer.parseInt(pageString);// 当前页码
 if (currentPage == 0)
 {
  currentPage = 1;
 }
 
 Integer totalCount = content.size(); // 记录的总数
 Integer totalPageCount = ((totalCount + pageSize) - 1) / pageSize;// 页面的总数

 Integer upPage = currentPage - 1;
 if (upPage <= 1)
 {
  upPage = 1;
 }

 Integer nextPage = currentPage + 1;
 if (nextPage >= totalPageCount)
 {
  nextPage = totalPageCount;
 } else
 {
  nextPage = currentPage + 1;
 }
 
 if(totalPageCount != 0) {
  if(totalPageCount == 1){
   subContent = content.subList(0, totalCount);
  } else if(currentPage==totalPageCount) {  
   subContent = content.subList(((totalPageCount - 1)*10), totalCount);
  } else {
   subContent = content.subList(((currentPage-1) * 10),(currentPage * 10));
  } 
 } else {
  subContent = new ArrayList();
 }

 

        如果相信java5的自动解封是完美的话,那么这段代码是没有问题的,而且我们用这段代码跑了几个月,居然运行良好,于是乎觉得java5的基本类型包装类太完美。可是最近系统更新增加了几个新的报表,其中一个报表在测试分页的时候出现了异常,异常情况是这样的,当页数不多的时候所有分页都是正常的,但是当页数比较多的时候,比如160页,这时候点其他页也是正常的,但是点最后一页的时候就出现异常了,于是把代码拿出来仔细看了一下发现当最后一页的时候理应执行的这段代码没有被执行

else if(currentPage==totalPageCount) {  
   subContent = content.subList(((totalPageCount - 1)*10), totalCount);
  }

        马上明白过来是怎么回事了,当两个都是整形包装类的时候,用==号它实际上是做了两个引用是否是同一对象的判断,而不是我们希望的两个对象的值是否相等,问题就出在这了,你要判断是同一对象就一直判断是同一对象啊,干么一下判断是否是同一对象,一下又判断是否是值相等呢,你这不是误导人吗,想不明白,盼有高手指点迷津。。。

 

        哎,java啊java,想说恨你不可能,可有时候想说爱你也不容易啊。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值