2017-04-13 41 views
0

下面的代碼行之間的解析提供了NullPointerException在Javaint和字符串,給出了意想不到的效果

任何輸入(在SRC 07,11等)

hrs = Integer.toString((Integer.getInteger(hrs)) + 12); 

所以我改成了:

Integer H = Integer.parseInt(hrs); 
H = H + 12; 
hrs = H.toString(); 

哪個工作正常。

誰能告訴我爲什麼第一行給NullpointerException

回答

0

你必須使用Integer.parseInt(String)這樣的:

hrs = Integer.toString((Integer.parseInt(hrs)) + 12); 

但你可以使用它代替:

hrs = (Integer.parseInt(hrs) + 12) + ""; 
2

簡單:你在呼喚你的兩個例子,兩種不同的方法。

Integer.getInteger(hrs) 

是不一樣的

Integer.parseInt(hrs); 

getInteger()的Javadoc:

確定具有指定名稱的系統屬性的整數值。 第一個參數被視爲系統屬性的名稱。系統屬性可以通過System.getProperty(java.lang.String)方法訪問。然後將該屬性的字符串值解釋爲整數值,並返回表示此值的Integer對象。可能的數字格式的詳細信息可以在getProperty的定義中找到。

如果沒有指定名稱的屬性,如果指定的名稱爲空或爲空,或者屬性的數字格式不正確,則返回null。

Then null is returned!

這就是這一切。所以,真正的答案可能是:更多地關注IDE向您提供的「代碼」建議。不要盲目接受他們;但確保你是真的放下你的方法打算使用;而不是其他一些碰巧具有相似簽名的人(關於輸入參數和返回類型)。

0

一個簡單的解決方案是

hrs = "" + (Integer.parseInt(hrs) + 12); 
1
public static Integer getInteger(String nm) 

確定具有指定 名稱的系統屬性的整數值。第一個參數被視爲系統屬性的名稱。 系統屬性可通過 System.getProperty(java.lang.String)方法訪問。然後將該 屬性的字符串值解釋爲整數值,並返回表示此值的Integer對象 。可以使用getProperty的定義找到可能的數字格式 的詳細信息。

如果沒有指定名稱的屬性,如果指定的名稱 爲空或爲空,或者該屬性的格式不正確,則返回null。

你的情況,則很可能需要使用

public static int parseInt(String s, 
          int radix) 
        throws NumberFormatException 

對於兩者請使用以下細節link

+0

人我沒注意到它。我想我們都在同一線路上思考,你在我之前發佈。如果你這麼說,我可以刪除我的。我沒有任何問題... – Jabir

+0

不用擔心;只是想明白。關閉編輯窗口並獲得「似曾相識」的體驗感覺很奇怪。無論如何我剛剛收到我對字符串標籤的100票;所以...讓我們分享快樂;-) – GhostCat

0

Integer.getInteger()不提供你的目的在這種情況下。如果您看到此方法的文檔,則主要是使用指定的名稱確定系統屬性的整數值。如果給定名稱與任何系統屬性都不匹配,則返回null。

在你的代碼,(Integer.getInteger(小時))+ 12這基本上是造成NPE與您試圖用12

來連接空請參閱this link更多細節

相關問題