Java.util.Objet.isNull vs objet == null

Comme vous le savez, java.util.Les objets

un utilitaire de méthodes pour les opérations sur les objets

une de ces méthodes est celle des objets.isNull ().

Ma compréhension est que les Objets.isNull () supprimerait la possibilité d'attribuer accidentellement une valeur nulle à l'objet en omettant la seconde =.

Toutefois, l'API Note membres:

cette méthode existe pour être utilisé comme prédicat, filtre (:: isNull)

y aurait-il une raison/circonstance pour laquelle je devrais utiliser object == null sur les objets.isNull() dans un si la déclaration<!--12?

Devrait Objecter.isNull() se limite à des Prédicats exclusivement?

Merci à l'avance, Lucas

29
demandé sur Lucas T 2016-06-22 18:49:09

4 réponses

devrait utiliser object = = null Sur Objects.isNull() dans une instruction if?

Si vous regardez l' code sourceIsNull méthode

 /* Returns true if the provided reference is null otherwise returns false.*/

 public static boolean isNull(Object obj) {
     return obj == null;
 }

C'est la même chose. Il n'y a pas de différence. Pour que vous puissiez l'utiliser en toute sécurité.

29
répondu ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ 2017-09-15 19:58:19

Objets.isNull est destiné à être utilisé dans le cadre de Java 8 lambda filtering.

C'est beaucoup plus facile et plus clair d'écrire

.stream().filter(Objects::isNull) 

que d'écrire

.stream().filter(x -> x == null).  

dans un si cependant l'un ou l'autre fonctionnera, l'utilisation de == null est probablement plus facile à lire mais à la fin il se limitera à une préférence de style.

13
répondu Craig Taylor 2017-09-03 16:19:08

Regardez le code source:

public static boolean isNull(Object obj) {
    return obj == null;
}

À vérifier null valeurs, vous pouvez utiliser:

  • Objects.isNull(myObject)
  • null == myObject // avoids assigning by typo
  • myObject == null // risk of typo

Le fait que Objects.isNull signifie Predicates ne vous empêche pas de l'utiliser comme ci-dessus.

10
répondu Mena 2016-06-22 15:52:23

y aurait-il une raison/circonstance pour laquelle je devrais utiliser object == null sur les objets.isNull() dans un si la déclaration?

Oui, une des raisons est pour simplifier le code. Dans si la déclarationobject == null est claire et bien connue. Il ne peut y avoir de mauvaise conduite si, par exemple, il y a une faute de frappe.

Ma compréhension est que les Objets.isNull () supprimerait le risque d'attribuer accidentellement un null la valeur de l'objet, par l'omission de la deuxième =.

S'il y a un if (object = null) {}omis= il ne compilera pas ou générera un avertissement en cas de Boolean objet! En fait il n'y a pas de raison d'utiliser Objects.isNull(object)object == null à l'intérieur de si la déclaration. Voici les deux versions côte à côte:

if (object == null) {
}

if (Objects.isNull(object)) {
}

Devrait Objecter.isNull() se limite à des Prédicats exclusivement?

cela pourrait être si oui, il est limité aux prédicats exclusivement, bien qu'il n'y ait pas d'obstacle technique à l'utilisation du Objects.isNull() partout.

public static boolean isNull(Object obj) javadoc de method:

@apinoteth cette méthode existe pour être utilisée comme java.util.fonction.Prédicat de filtre (:: isNull)

Donc, si vous utilisez la méthode un prédicat vous utilisez en fait une expression plus complexe et encombrante par rapport à la simple object == null.

voici un extrait pour comparer les avantages de Objects.isNull(object)

List<String> list = Arrays.asList("a", "b", null, "c", null);

// As ready-made predicate
long countNullsWithPredicate = list.stream().filter(Objects::isNull).count();

// Lambda
long countNullsWithLambda = list.stream().filter(object -> object == null).count();

// Reimplement the Objects::isNull predicate
long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() {
    @Override
    public boolean test(Object obj) {
        return obj == null;
    }
}).count();
3
répondu Vasil 2017-09-03 14:35:14