Что быстрее, попробуйте catch или if-else в java (производительность WRT) - PullRequest
34 голосов
/ 16 августа 2010

Какой из них быстрее:

Либо это

try {
  n.foo();
} 
catch(NullPointerException ex) {
}

или

if (n != null) n.foo();

Ответы [ 13 ]

0 голосов
/ 16 августа 2010

Этот вопрос недавно обсуждался доктором Хайнцем:

http://javaspecialists.eu/webinars/recordings/if-else-npe-teaser.mov

0 голосов
/ 16 августа 2010

Во-первых, если ... тогда ... еще лучше, по многим причинам, указанным другими авторами.

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

0 голосов
/ 16 августа 2010

Определенно вторая форма намного быстрее. В сценарии try-catch он выбрасывает exception, который делает new Exception() некоторой формы. Затем вызывается блок catch, который является вызовом метода и должен выполнить любой код в нем. Вы поняли.

...