Ce qui est plus rapide, essayez de l'attraper ou si-sinon en java (WRT performance)

Lequel est le plus rapide:

Soit ce

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

ou

if (n != null) n.foo();
  • Comment à propos de "Qui est plus lisible?" La Performance est votre dernière préoccupation.
  • Utilisation de try-catch clause de cette façon est certainement une mauvaise idée. Aussi try-catch résultats dans instantinating de new object (l'exception). Donc je dirais que (n!=null) est plus rapide dans le cas où vous avez un grand nombre de cas où n == null. Aussi n!=la valeur null est ultra-rapide à construire.
  • La Performance est très différente selon que n est nul ou pas.
  • "Aussi try-catch résultats dans instantinating de new object (l'exception)". Non, il n'est pas. Lancer une exception ne.
  • Hmm, bizarre que c'est le sujet du dernier Javaspecialists bulletin de quiz. Heinz M. Kabutz ne soutiennent que la première forme est en effet très mauvais pour la performance. Il n'est cependant fournir une information supplémentaire: n est nulle de 10% du temps.
  • Ils sont différents... la première forme sera aussi attraper les Npe générée à partir de foo()
  • il ne le fait pas. Lancer une exception ne." Non, il n'est pas. 😉 La construction de la levée d'une exception n'. Du code peut choisir volontairement lever de nouveau la même exception, encore et encore (aussi fou que ça puisse être). Désolé, j'ai juste eu à rajouter. 🙂
  • Dans le très ancien des jours exceptions ont été lents (car ils ont capturé la trace de la pile lors de la génération). Aujourd'hui, ils sont plus rapides, mais il reste encore beaucoup de travail qui est inutile dans ce cas.
  • Je suis venu ici demandais la même chose. Ce sujet le cas où vous êtes à la recherche pour une condition qui se produit une fois, et une seule fois (parce que vos prises block fait une initialisation de la base de l'information dans un argument), sur un programme qui pourrait fonctionner pendant des heures? En gros, est-ce plus rapide de passer par un essai qui réussit toujours que SI c'est toujours vrai? Est-il un coût à long terme à un essai qui réussit toujours? En Python, ils encouragent ce genre de chose - pourquoi le cours de l'histoire en Java?

InformationsquelleAutor Rakesh | 2010-08-16