Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Integer.toString(int)


Автор: EnJ 14.2.2010, 22:52
Добрый вечер(утро...).
Изучая язык, полез в стандарные классы, смотреть как они реализованы и наткнулся на метод toString класса Integer:
Код

public static String toString(int i) {
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(0, size, buf);
}

Интересуют 2-я и 3-я строки: зачем эта проверка нижней границы диапазона типа? Почему нет такой же для верхней границы?
Заранее пасиб smile

Автор: jk1 14.2.2010, 23:34
Цитата

зачем эта проверка нижней границы диапазона типа?

Затем, что метод static void getChars(int i, int index, char[] buf) используемый в приведенной реализации падает, если i == Integer.MIN_VALUE. Чтобы избежать этого, этот крайний случай обрабатывается отдельно.
Что касается верхней границы типа, то она обрабатывается корректно, поэтому в обходе нет необходимости.

Автор: Vasay 14.2.2010, 23:37
EnJ, 

А подумай  smile  Вспомни диапазон int. Посмотри, что получится, если не сделать эту проверку. 

Автор: EnJ 15.2.2010, 18:32
Хм... диапазон интов от -2147483648 до 2147483647 (2 в 31 степени). Минимальное значение по модулю больше на единицу.
Тогда возникает вопрос, почему раелизовали такое минимальное значение, а максимальное другое? Какие-то технические ограниечения?

Автор: jk1 15.2.2010, 19:22
Цитата

почему раелизовали такое минимальное значение, а максимальное другое?

http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)
Внизу статьи,  в списке недостатков, содержится ответ и на ваш первоначальный вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)