日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java程序員慣性思維的一個錯誤

很久沒有積累東西了,碰巧前幾天遇到一個的問題,雖然不大但是比較有意思,在這里稍微記錄一下,以后可以作為面試題之類的考驗其他人,想想也遠比那些被我們詬病的題目要實際的多:

目前創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務器托管、網(wǎng)站托管、服務器租用、企業(yè)網(wǎng)站設(shè)計、民樂網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

有表結(jié)構(gòu)如下:

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

問以下兩段代碼,哪段會出現(xiàn)錯誤,為什么?

代碼片段一:

 
 
 
  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實現(xiàn)查詢HQL匯總語句返回結(jié)果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實現(xiàn)查詢HQL匯總語句返回結(jié)果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);

實際運行會發(fā)現(xiàn) 代碼片段2會出現(xiàn)錯誤 而代碼片段1是正常可以運行的,這里是在功能開發(fā)過程中 片段2是在片段1的基礎(chǔ)上慣性思維去實現(xiàn)的,而實際運行卻會發(fā)現(xiàn) 結(jié)果并不是想要的那樣,這個動手能力強的人可以實際調(diào)試一下就會很快明白里面的所以然。這里簡單說一下:

做過hibernate的人都知道 用hibernate調(diào)用sql查詢出的匯總語句,返回的結(jié)果是封裝成Object的保存到List中的,而代碼1和代碼2相比較,差別只是在字段的多少上,如果是2個以上的字段 結(jié)果是封裝成Object[]數(shù)組的,這個無可爭議,但是如果是一個字段的話List里保存的是Object,而不是Object[]數(shù)組。

這樣就可以推論這里hibernate內(nèi)部是做了處理的。

代碼2循環(huán)中應該是:

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

網(wǎng)站欄目:Java程序員慣性思維的一個錯誤
鏈接地址:http://www.dlmjj.cn/article/cdicoie.html