Java程序员惯性思维的一个错误

很久没有积累东西了,碰巧前几天遇到一个的问题,虽然不大但是比较有意思,在这里稍微记录一下,以后可以作为面试题之类的考验其他人,想想也远比那些被我们诟病的题目要实际的多:

目前创新互联已为上千的企业提供了网站建设、域名、雅安服务器托管、网站托管、服务器租用、企业网站设计、民乐网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

有表结构如下:

 
 
 
  1. T_SOME_TABLE{
  2. crowid varchar(36);
  3. zrmb float(7,3);
  4. zjdw float(7,3);

问以下两段代码,哪段会出现错误,为什么?

代码片段一:

 
 
 
  1. //后台代码如下:
  2.     String hqlStr="select SUM(t.zrmb) AS SUM_1,SUM(t.zjdw) AS SUM_2 from T_SOME_TABLE t where 1=1 ";
  3.     List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List
  4.     request.setAttribute("sumList",sumList);
  5. //前台代码如下:
  6.     String sum1="";
  7.     String sum2="";
  8.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList");
  9.     if(null!=sumList){
  10.         for(int i=0;i
  11.             Object[] tempObj=(Object[])sumList.get(i);
  12.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString();
  13.             sum2=tempObj[1]==null?"0.0":tempObj[1].toString();
  14.         }
  15.     }
  16.     out.prinln("sum1:"+sum1);
  17.     out.prinln("sum2:"+sum2);

代码片段二:

 
 
 
  1. //后台代码如下:
  2.     String hqlStr="select SUM(t.zrmb) AS SUM_1  from T_SOME_TABLE t where 1=1 ";
  3.     List sumList=baseDao.find(hqlStr);//hibernate实现查询HQL汇总语句返回结果List
  4.     request.setAttribute("sumList",sumList);
  5. //前台代码如下:
  6.     String sum1="";
  7.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList");
  8.     if(null!=sumList){
  9.         for(int i=0;i
  10.             Object[] tempObj=(Object[])sumList.get(i);
  11.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString();
  12.         }
  13.     }
  14.     out.prinln("sum1:"+sum1);

实际运行会发现 代码片段2会出现错误 而代码片段1是正常可以运行的,这里是在功能开发过程中 片段2是在片段1的基础上惯性思维去实现的,而实际运行却会发现 结果并不是想要的那样,这个动手能力强的人可以实际调试一下就会很快明白里面的所以然。这里简单说一下:

做过hibernate的人都知道 用hibernate调用sql查询出的汇总语句,返回的结果是封装成Object的保存到List中的,而代码1和代码2相比较,差别只是在字段的多少上,如果是2个以上的字段 结果是封装成Object[]数组的,这个无可争议,但是如果是一个字段的话List里保存的是Object,而不是Object[]数组。

这样就可以推论这里hibernate内部是做了处理的。

代码2循环中应该是:

 
 
 
  1. Object tempObj=(Object)sumList.get(i); 
  2. sum1=tempObj==null?"0.0":tempObj.toString();

网站栏目:Java程序员惯性思维的一个错误
文章路径:http://www.hantingmc.com/qtweb/news45/303645.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联