Каков самый вводящий в заблуждение метод в Основе Java API? [закрытый]

каждый - Большой "O"

, каждый - Большая Тета

http://en.wikipedia.org/wiki/Big_O_notation

, Большой O означает, что Ваш алгоритм не выполнится на больше никаких шагов, чем в данном выражении (n^2)

, Большая Омега означает, что Ваш алгоритм не выполнится ни на каком меньшем количестве шагов, чем в данном выражении (n^2)

, Когда оба условия будут верны для того же выражения, можно использовать большую нотацию теты....

36
задан 13 revs, 5 users 68% 8 November 2011 в 22:56
поделиться

17 ответов

Метод URL equals () сравнивает IP-адреса, использует сетевое соединение и является операцией блокировки!

Из документации javadocs:

Два хоста считаются эквивалентными, если оба имени хоста могут быть решено на одни и те же IP-адреса; иначе, если имя хоста не может быть разрешено, имена хостов должны быть одинаковыми без учета регистра; или оба имена хостов равны нулю.

Поскольку сравнение хостов требует разрешения имен, эта операция блокирующая операция.

Примечание. Определенное поведение для equals известно несовместимы с виртуальным хостингом в HTTP.

Вместо этого используйте URI.

43
ответ дан 27 November 2019 в 05:08
поделиться

Одна из моих любимых проблем с Java - это тот факт, что сбой в Integer.parseInt ("SomeString") просто указывает на то, что произошла ошибка синтаксического анализа, и не может сказать нам, что такое "SomeString" был. Из-за этого иногда необходимо выполнить множество отладок, чтобы выяснить, что это за строка. Если бы сообщение об ошибке включало ошибочную строку, выявление проблемы было бы намного быстрее.

3
ответ дан 27 November 2019 в 05:08
поделиться

Я бы не стал помещать его в раздел «Самый неловкий», но java.security.MessageDigest.getInstance () меня немного смутил.

Обычно я вижу «getInstance» () "метод возвращает Singleton.

Если метод должен возвращать новый экземпляр, я могу ожидать увидеть MessageDigestFactory.newInstance () или, по крайней мере, newInstance () в классе MessageDigest вместо их getInstance ().

См .: MessageDigest.getInstance ()

Из того, что я тестировал, MessageDigest.getInstance () возвращает экземпляр New каждый раз, когда он вызывается.

2
ответ дан 27 November 2019 в 05:08
поделиться

BigDecimal .setScale (int) сеттер, который возвращает BigDecimal хммм

3
ответ дан 27 November 2019 в 05:08
поделиться

Согласен. Мне всегда было неудобно с этими методами.

Я даже обнаружил ошибку в нашей базе кода, которая была вызвана тем, что кто-то использовал Integer.getInteger () для анализа строки, не осознавая, что ищет свойство.

К сожалению, конечно, невозможно удалить API из соображений обратной совместимости.

4
ответ дан 27 November 2019 в 05:08
поделиться

Я не уверен, что кто-то все еще использует это, но сообщение об ошибке от DocumentBuilder.parse () , если что-то пойдет не так, (почти?) Всегда "Content is not разрешено в прологе ". даже если настоящая причина была совсем в другом.

3
ответ дан 27 November 2019 в 05:08
поделиться

Я так и не понял, почему JDBC API постоянно начинает отсчет с 1, в то время как остальная часть юниверса Java (и C, C ++, C #, ...) начинается с 0. Это относится к номера столбцов, номера параметров в подготовленных операторах и т. д.

5
ответ дан 27 November 2019 в 05:08
поделиться

InputStream.read (byte [])

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

6
ответ дан 27 November 2019 в 05:08
поделиться

Некоторые редакторы заметили, что String.substring приводит к утечкам памяти, потому что внутри он не копирует подстроку, а просто копирует указатель на всю строку + смещение + длина. Так что, если вы ожидали, что сборщик мусора будет собирать всю строку, вы ошиблись.

http://www.reddit.com/r/programming/comments/8ydvg/the_dangers_of_stringsubstring/c0au0gj

6
ответ дан 27 November 2019 в 05:08
поделиться

Ну, System.setOut () установит значение в final член System !!!!

5
ответ дан 27 November 2019 в 05:08
поделиться

Вероятно, это не худший метод, но мне никогда не нравился этот :

Предположим, x - это список, который, как известно, содержит только строки. Следующий код можно использовать для выгрузки списка во вновь выделенный массив String:

String[] y = x.toArray(new String[0]);

Передача в метод массива String размера 0 кажется мне безумной и неинтуитивной.

7
ответ дан 27 November 2019 в 05:08
поделиться

Только что узнал о методах isInterrupted и interrupted класса Thread . Из javadoc :

static boolean interrupted()
// Tests whether the current thread has been interrupted.
boolean isInterrupted()
// Tests whether this thread has been interrupted.

Проблема в том, что прервано на самом деле очищает статус прерывания, помимо выполнения теста, а isInterrupted просто проверяет статус.

9
ответ дан 27 November 2019 в 05:08
поделиться
String.getBytes()

часто является причиной множества глупых проблем с кодировкой символов в приложениях, поскольку использует кодировку символов базовой платформы.

11
ответ дан 27 November 2019 в 05:08
поделиться

Одна хорошо известная проблема с классом Calendar состоит в том, что месяцы нумеруются от 0 до 11, а не от 1 до 12. Очень легко сделать такую ​​ошибку:

Calendar cal = Calendar.getInstance();

// Set date to August 18, 2009? WRONG! Sets the date to September 18, 2009!
cal.set(2009, 8, 18);

Правильный способ сделать это, используя константы для месяцев:

cal.set(2009, Calendar.AUGUST, 18);

Но этот метод слишком легко делает ошибку, используя обычные номера месяцев от 1 до 12.

Я считаю это ошибкой при разработке Календаря. класс.

31
ответ дан 27 November 2019 в 05:08
поделиться

Моя проблема связана с методом подстроки String; каждый раз, когда я его использую, мне приходится писать слова «гамбургер» и «гамбургер». substring (4,8) = «настоятельно рекомендуется» вспомнить, как его правильно использовать

5
ответ дан 27 November 2019 в 05:08
поделиться

Только что получил это из здесь , относительно методов add и remove из List ( при параметрировании с помощью Целое число ). Например:

List<Integer> l = new ArrayList<Integer>();
l.add(20);
l.remove(20); // throws ArrayIndexOutOfBoundsException, because it will try to access index 20
l.remove(new Integer(20)); // this works   
26
ответ дан 27 November 2019 в 05:08
поделиться

java.util.Date.getDate () вернул число 1-31. getDayOfMonth () - точный способ объяснить это, в то время как вы обычно пытались вспомнить getTime () .

Не могу дождаться, пока Джода Тайм возьмет верх.

1
ответ дан 27 November 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: