2010-07-30 5 views
0

Cette phrase est égale à myString != null, myString.length() > 0 et ! myString.equals("")? Quel est le plus efficace? (Java 1.4)Efficace dans les chaînes Java

+6

Peu importe. Passez à quelque chose d'important. – JohnFx

+4

@JohnFx: quelque chose d'important comme, disons, le sens de la vie? Quoi qu'il en soit, ce qui ** EST ** important est que, contrairement à ce qui est indiqué dans les questions, ce sont ** PAS ÉGAUX DU TOUT **. – NoozNooz42

Répondre

8

Ce ne sont pas tous équivalents - une référence nulle n'est pas la même chose qu'une chaîne vide. Le test nul sera probablement le plus efficace car tous les autres nécessitent au moins d'abord de savoir si la référence est nulle ou non.

Le meilleur moyen de le savoir est de mesurer la performance:

public static void main(String[] args) 
{ 
    String myString = "foo"; 
    int a = 0; 
    for (int i = 0; i < 100000000; ++i) 
    { 
     //if (myString != null) 
     //if (myString.length() > 0) 
     if (!myString.equals("")) 
     { 
      a++; 
     } 
    } 
    System.out.println(a); 
} 

Les résultats:

 
myString != null  : 0.61s 
myString.length() > 0 : 0.67s 
!myString.equals("") : 2.82s 

donc un test nul et un test de longueur prennent à peu près la même quantité de temps, mais tester l'égalité avec une chaîne vide prend plus de quatre fois plus de temps. Notez que j'ai testé sur une version légèrement plus récente de Java que vous utilisez, donc vous devriez exécuter les tests vous-même pour voir si vous obtenez les mêmes résultats.

1

Ils ne sont pas équivalents. Si myString est null, le 2nd lancera une exception NullPointerException.

Cela dit, (myString! = Null & & myString.length()! = 0) pourrait être un peu plus efficace que ("" equals (myString)). Mais ils vont quand même réagir différemment à myString étant nul.

Questions connexes