自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java程序員慣性思維的一個錯誤

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

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

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

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

問以下兩段代碼,哪段會出現(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. //前臺代碼如下: 
  7.     String sum1=""
  8.     String sum2=""
  9.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList"); 
  10.     if(null!=sumList){ 
  11.         for(int i=0;i<sumList.size();i++){ 
  12.             Object[] tempObj=(Object[])sumList.get(i); 
  13.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString(); 
  14.             sum2=tempObj[1]==null?"0.0":tempObj[1].toString(); 
  15.         } 
  16.     } 
  17.     out.prinln("sum1:"+sum1); 
  18.     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. //前臺代碼如下: 
  7.     String sum1=""
  8.     ArrayList sumList=request.getAttribute("sumList")==null?null:(ArrayList)request.getAttribute("sumList"); 
  9.     if(null!=sumList){ 
  10.         for(int i=0;i<sumList.size();i++){ 
  11.             Object[] tempObj=(Object[])sumList.get(i); 
  12.             sum1=tempObj[0]==null?"0.0":tempObj[0].toString(); 
  13.         } 
  14.     } 
  15.     out.prinln("sum1:"+sum1); 

實際運行會發(fā)現(xiàn) 代碼片段2會出現(xiàn)錯誤 而代碼片段1是正常可以運行的,這里是在功能開發(fā)過程中 片段2是在片段1的基礎(chǔ)上慣性思維去實現(xiàn)的,而實際運行卻會發(fā)現(xiàn) 結(jié)果并不是想要的那樣,這個動手能力強(qiáng)的人可以實際調(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)中應(yīng)該是:

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

原文鏈接:http://moonights.iteye.com/blog/1272980

【編輯推薦】

  1. 高手真經(jīng) 13條Java核心技術(shù)
  2. 去故就新 Java線程新同步機(jī)制
  3. Java的ClassLoader機(jī)制解析
  4. 精解Java中代理模式的實現(xiàn)
  5. Java常量池詳解之抓狂的面試題
責(zé)任編輯:林師授 來源: moonights的博客
相關(guān)推薦

2019-09-19 14:28:14

程序員分布式系統(tǒng)

2020-02-22 21:51:43

程序員Microsoft SServerSQL

2014-01-06 09:33:32

程序員管理

2020-10-05 21:13:37

程序員技能開發(fā)者

2015-06-08 10:48:39

程序員程序員自白

2011-02-14 13:05:17

PythonWeb

2015-06-16 10:31:36

程序員

2020-07-10 09:55:15

程序員技能開發(fā)者

2021-06-04 10:15:17

JavaSQL編程語言

2021-07-01 07:43:41

項目程序員代碼

2019-11-07 15:30:00

EmacsIDE

2015-08-24 10:07:13

程序員bug

2020-01-06 09:53:29

程序員

2015-05-13 14:06:03

程序員糟糕的程序員

2010-10-18 11:39:41

程序員

2009-02-12 15:07:57

程序員創(chuàng)業(yè)經(jīng)驗

2012-04-12 14:49:31

程序員

2019-04-22 10:25:52

程序員技術(shù)職場

2012-01-09 17:45:48

Java程序員

2025-01-13 06:20:00

點贊
收藏

51CTO技術(shù)棧公眾號