2014-09-10 33 views
3

我得到NumberFormatException爲字符串9999999990但不是當我使用1111111110 當我通過該字符串調用Integer.parseInt時。 讓我知道什麼是錯的。Integer.parseInt(「9999999990」);

String str="9999999990"; 
    int f = Integer.parseInt("2147483647");// No Exception here 
     int x =Integer.parseInt(str); // Exception is thrown here 
+7

是的,因爲int的最大值爲 – StackFlowed 2014-09-10 17:24:07

+0

[Integer.MAX_VALUE](http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#MAX_VALUE) – 2014-09-10 17:25:47

+0

Java數據類型概述:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html – MrTux 2014-09-10 17:26:43

回答

7

Integer.parseInt將拋出一個異常時,就是它的解析不能表示爲int。第一個例子接近100億,大於最大可能的int,略多於20億。

Integer.parseInt(String)委託給Integer.parseInt(String, 10),採用一個基數的版本,和那些的Javadoc狀態:

如果發生以下任一情況NumberFormatException類型,則拋出異常:

  • 第一參數爲null或是長度爲零的字符串。
  • 基數小於Character.MIN_RADIX或大於Character.MAX_RADIX。
  • 字符串的任何字符不是指定基數的數字,只是第一個字符可能是減號' - '('\ u002D')或加號'+'('\ u002B'),前提是該字符串長於長度1.
  • 字符串表示的值爲而不是類型int的值。

(重點煤礦)

如果你需要解析,您可以使用Long.parseLong,將處理更大的數字。

+1

或者,嘿,如果數字太長,'新的BigInteger(hugeHonkingNumberString)' – jdphenix 2014-09-10 17:45:00

6

int只能有2147483647的最大值,所以如果你試圖解析比,你會得到一個異常大的數量(因爲它不是一個有效的int。)

Long.parseLong()將處理較大的數字但請記住它仍然有一個上限(2^63-1)。如果你真的需要一個沒有上限的類型,你必須使用BigInteger(它有一個構造函數接受一個字符串)。

(你可以找到所有基元數據類型及其最大值的更多信息here

+1

沒有看它,我會在這裏出去,說最大自簽名以來,長的值爲2^63-1。 – 2014-09-10 17:28:07

+0

@JoachimIsaksson Doh。 Mistype,對不起。 – berry120 2014-09-10 17:28:42