2013-02-27 81 views
3

Integer類包含一些方法來字符串轉換成整數:爲什麼整數不能解決空字符串

  1. Integer.parseInt(null);參數:字符串返回:整型,所以我預計,當參數爲null,該拋NPE

  2. Integer.valueOf(null);參數:字符串返回:整型,所以我期望當參數爲null時,它應該返回null。但是這個先決條件是錯誤的,我問爲什麼沒有這樣的方法可以處理這種情況?

+0

Javadoc說:「NumberFormatException - 如果字符串不包含可分析的整數」。這是你得到的? – 2013-02-27 15:26:38

+0

這不是您通常需要依賴的行爲(對null參數返回null),所以它通常不是問題。如果您確實需要依賴它,只需創建一個包裝它並以所需方式處理null的實用程序方法? – berry120 2013-02-27 15:26:44

+0

@EdwinDalorzo nope。我的問題是爲什麼有一些可以用空字符串處理的新方法。如果(value == null)返回null else retun valueOf(value),那麼創建如此困難? – hudi 2013-02-27 15:29:32

回答

7

在太陽誰實施整型(一long很久以前:))時,他們寫道,方法可能是沒有想到的數據庫中的人。除了在處理數據庫數據時,或者極少數情況下,您試圖用null顯式表示「unknown」時,null通常表示某些事情已經發生了嚴重錯誤。總的來說,一旦出現問題,立即提出例外是個好主意。 (a Fail fast設計)

如果您曾經花時間在C中查找由於字符串值超過您爲其提供的內存(然後重寫了某些程序代碼或其他數據)的分段錯誤,您將對於出現問題時不失敗是多麼糟糕有非常好的評價。

從Java 1.0開始,Java與數據庫的交互變得非常普遍,所以你可能會建議應該有一種方法來處理這個問題。整數是一個最終的類,所以如果你像類一樣構建你自己的整型,你將失去自動裝箱,所以這可能確實需要oracle改變語言。

基本上,你觀察到的是,現在是路,有人將不得不支付你周圍代碼:)

11

null不是整數的有效表示。 Integer.parseInt()要求解析的字符串是整型數字的整數表示。

Integer.parseInt()

public static int parseInt(String s, int radix) 
440     throws NumberFormatException 
441  { 
442   if (s == null) { 
443    throw new NumberFormatException("null"); 
444   } 

Integer.valueOf(str)] //哪個inviokes的Integer.parseInt(STR)返回整數實例。

public static Integer valueOf(String s) throws NumberFormatException 
569  { 
570   return new Integer(parseInt(s, 10)); 
571  } 
+1

我不同意我使用整數,因爲我需要處理空值。當我不想要我使用int – hudi 2013-02-27 15:25:36

+4

...你不同意java規格? – 2013-02-27 15:27:05

+1

我想什麼PremGenError意味着整數是數學實體,而不是'Integer'類的對象。 :) – asteri 2013-02-27 15:27:19

2

我可能是錯的,@ hudi,但這是你在找什麼?

public Integer valueOf2(String inputString) { 
    return (inputString == null) ? null : Integer.parseInt(inputString); 
} 
+0

是啊我在評論中寫這個,但我的問題是爲什麼Integer類中沒有這樣的方法? – hudi 2013-02-27 15:36:02

0

@hudi,這個怎麼樣?

IntegerConverter

我從來沒有使用過它,但它看起來像如果有一個轉換錯誤,您可以指定一個默認值。我知道,爲了這個,在項目中加入另一個jar是一件很痛苦的事情;如果有標準的話會很好。

相關問題