2013-04-09 2 views
-1

Когда я используютипажей внутренний процесс в Java

String s = "12";  
    int n = Integer.parseInt(s); 

Это дает n значение, как 12 .Это хорошо для меня.

Что он делает изнутри. Что такое внутренний процесс здесь работает. Может кто-нибудь объяснить? Как строка действительно преобразуется как целое число . Прежде чем давать какой-либо нисходящий сигнал, пожалуйста, объясните мне причину. В следующий раз я исправлю ошибку . Я искал этот вопрос. Но я не ответил .

Заранее спасибо.

+0

Возможный дубликат: http://stackoverflow.com/questions/1410555/how-does-integer-parseintstring-actually-work – Quetzalcoatl

+0

Кажется, это дубликат http://stackoverflow.com/questions/1410555/how- do-integer-parseintstring-actual-work – devnull

+1

Вы вызываете статический метод «parseInt». Вы ничего не «приписываете». –

ответ

0

Привет это фактическая реализация метода ParseInt пожалуйста, пройти через ::

public static int parseInt(String s) throws NumberFormatException { 
     return parseInt(s,10); 
    } 

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

    if (radix < Character.MIN_RADIX) { 
     throw new NumberFormatException("radix " + radix + 
         " less than Character.MIN_RADIX"); 
    } 

    if (radix > Character.MAX_RADIX) { 
     throw new NumberFormatException("radix " + radix + 
         " greater than Character.MAX_RADIX"); 
    } 

    int result = 0; 
    boolean negative = false; 
    int i = 0, max = s.length(); 
    int limit; 
    int multmin; 
    int digit; 

    if (max > 0) { 
     if (s.charAt(0) == '-') { 
     negative = true; 
     limit = Integer.MIN_VALUE; 
     i++; 
     } else { 
     limit = -Integer.MAX_VALUE; 
     } 
     multmin = limit/radix; 
     if (i < max) { 
     digit = Character.digit(s.charAt(i++),radix); 
     if (digit < 0) { 
      throw NumberFormatException.forInputString(s); 
     } else { 
      result = -digit; 
     } 
     } 
     while (i < max) { 
     // Accumulating negatively avoids surprises near MAX_VALUE 
     digit = Character.digit(s.charAt(i++),radix); 
     if (digit < 0) { 
      throw NumberFormatException.forInputString(s); 
     } 
     if (result < multmin) { 
      throw NumberFormatException.forInputString(s); 
     } 
     result *= radix; 
     if (result < limit + digit) { 
      throw NumberFormatException.forInputString(s); 
     } 
     result -= digit; 
     } 
    } else { 
     throw NumberFormatException.forInputString(s); 
    } 
    if (negative) { 
     if (i > 1) { 
     return result; 
     } else { /* Only got "-" */ 
     throw NumberFormatException.forInputString(s); 
     } 
    } else { 
     return -result; 
    } 
    } 
+0

Я не понимаю, почему это так. Это фактическая реализация метода parseInt, который демонстрирует, как он работает. –

0

Peek внутри внутреннего кода Integer.parseInt(), например here в строке 444.

Но самый простой способ, если вы прикрепить src.zip от вашей установки Java в вашем любимом редакторе (например, Eclipse) в качестве источника, Integer.class - таким образом вы получите фактическую реализацию.

0

в этом посте: how it's working это хорошо показано, как это работает. Вы должны уметь правильно это понимать после прочтения

0

Я бы рекомендовал прикрепить исходные коды к IDE, которая вам нравится, и когда вам что-то нужно, вам нужно будет только перейти в исходный код любой библиотеки. Лучший способ сделать это - использовать IntelliJ IDEA и создать пустой модуль Maven. Затем после перехода в реализацию метода вам будет предложено загрузить источники ... Быстро и просто.

Смежные вопросы