2011-03-15 64 views
0

我在JSP頁面上工作,但運行時我正在運行一個空指針。爲了分離問題,我對預期的變量響應進行了硬編碼,而不是使用getter(之前是action.getName(psi.getLong())))。果然,當我試圖用原始長時間運行頁面時出現錯誤。如下爲什麼我的多頭變成了整數?

public String getName(long mid) throws DBException { 
     try { 
      return personnelDAO.getName(mid); 
     } catch (fooException e) { 
      e.printStackTrace(); 
      return "exception retrieving name"; 
     } 

但通過上述判斷

An error occurred at line: 70 in the jsp file: /auth/foo/viewBar.jsp 
The literal 9000000000 of type int is out of range 

70:    <%long sarah = 9000000000; %> 
71:    <td> <%= StringEscapeUtils.escapeHtml(""+action.getName(sarah)) %></td> 

的getName在別處定義,我猜的90億甚至沒有獲得通過遠。 .JSP不能處理多頭?

此外,這個錯誤是否會導致我在運行時遇到的空指針錯誤,或者是一個完全單獨的錯誤? (這就是所有的stacktrack說:NullPointerException: null

編輯:D'oh。使用工廠,忘記實例化我正在使用的其中一個DAO。那就是Nul​​lPointer的原因。案件結案。

+1

嘗試填充把你的長號碼與你的長號碼比如'長號碼= 900L;' – asgs 2011-03-15 06:39:02

+0

你能發佈NPE堆棧跟蹤嗎? – 2011-03-15 06:48:26

+0

@Jigar - 我已經修好了。但是,它確實告訴我,我需要咖啡因或睡眠;最好是後者。 – 2011-03-15 06:59:38

回答

2

嘗試使用

9000000000L。

在這種情況下,您需要指定類型。 或者使用

new Long("9000000000")

+3

'new Long(9000000000)'將不起作用,因爲'9000000000'仍然會被解釋爲'int'。 – 2011-03-15 06:57:44

+0

感謝您的糾正,我錯過了「」...... – Winfred 2011-03-15 07:38:27

3

變化long sarah = 9000000000;long sarah = 9000000000L;。沒有'L'後綴,任何整數字面量是Java中的int

+0

編譯器不只是「承擔」這個... – 2011-03-15 07:09:07

+0

@Stephen C:我猜你會同意我是否改變了「認爲」? – MAK 2011-03-15 07:11:28

+0

類別。真正的問題是JLS認爲沒有後綴的整數文字是一個'int'文字。編譯器只是一個實現JLS的軟件......它對這個問題沒有任何「看法」。 – 2011-03-15 07:32:13

0

爲了理解這裏發生了什麼,您需要了解一些關於整數文字的內容。

在Java中有兩種整數文字。

  • 長字面具有後綴 'L',並且必須落在範圍-2^63至+ 2^63 - 1,具有鍵入long

  • 一個int字面沒有後綴,並且必須落在範圍-2^31至+ 2^31 - 1。它已鍵入int

落在規定範圍之外的整數字面值是一個編譯錯誤,無論上下文是什麼。因此:

long sarah = 9000000000; 

是一個編譯錯誤,儘管「數字」與LHS上的類型是兼容的。同樣的:

Long fred = new Long(9000000000); 

是一個編譯錯誤...出於同樣的原因。

解決方法是添加一個L後綴;例如

long sarah = 9000000000L; 
Long fred = new Long(9000000000L); 

(其實,我跟一個白色的小謊言在上方,JLS 實際上指出,字面的整數是無符號的,那什麼看起來像一個「負文字」,實際上是一種表達使用Unary minus操作符,合法的整數字面值因此是0到+2^31 - 1(對於int)和0到+ 2^63 - 1(對於long)。文字2^31和2^63用於表示Integer.MIN_VALUE和Long.MIN_VALUE是特殊情況...他們是只有合法時,前面加上一元減號。)

相關問題