two strings sort lists example comparing java java-8 compare

strings - java.util.Objects.isNull vs object== null



sorted lambda java 8 (4)

¿Debería usar object == null sobre Objects.isNull () en una sentencia if?

Si nos fijamos en el código fuente del método IsNull ,

/* Returns true if the provided reference is null otherwise returns false.*/ public static boolean isNull(Object obj) { return obj == null; }

Es lo mismo. No hay diferencia. Así que puedes usarlo con seguridad.

Como ustedes saben, java.util.Objects es

Una utilidad de los métodos para operar en objetos.

Uno de estos métodos es Objects.isNull ().

Mi entendimiento es que Objects.isNull () eliminaría la posibilidad de asignar accidentalmente un valor nulo al objeto omitiendo el segundo = .

Sin embargo, la nota API indica:

Este método existe para ser utilizado como Predicado, filtro (Objetos :: isNull)

¿Habría alguna razón / circunstancia por la cual debería usar object == null sobre Objects.isNull () en una declaración if ?

¿Debería estar limitado Objects.isNull () a Predicados exclusivamente?

Gracias de antemano, Lucas


¿Habría alguna razón / circunstancia por la cual debería usar object == null sobre Objects.isNull () en una declaración if ?

Sí, una razón es mantener el código simple. Dentro de la sentencia object == null es clara y bien conocida. No puede llevar a ningún mal comportamiento si, por ejemplo, hay un error tipográfico.

Mi entendimiento es que Objects.isNull () eliminaría la posibilidad de asignar accidentalmente un valor nulo al objeto omitiendo el segundo =.

Si hay un if (object = null) {} con omitido = no se compilará o generará una advertencia en caso de un objeto Boolean . En realidad, no hay ninguna razón para usar Objects.isNull(object) sobre object == null en la instrucción if . Aquí están las dos variantes de lado a lado:

if (object == null) { } if (Objects.isNull(object)) { }

¿Debería estar limitado Objects.isNull () a Predicados exclusivamente?

Se podría decir que sí, se limita a Predicados exclusivamente, aunque no hay ningún obstáculo técnico para usar los Objects.isNull() todas partes.

Desde el javadoc del método public static boolean isNull(Object obj) :

@apiNoteEste método existe para ser utilizado como java.util.function.Predicate, filter (Objects :: isNull)

Entonces, si usa el método como no es un predicado, en realidad está utilizando una expresión más compleja y engorrosa en comparación con el object == null simple object == null .

Aquí hay un fragmento para comparar el beneficio 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();


Mira la fuente:

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

Para comprobar null valores null , puede utilizar:

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

El hecho de que Objects.isNull esté destinado a Predicate s no le impide usarlo como se Objects.isNull anteriormente.


Objects.isNull está diseñado para su uso dentro del filtrado lambda de Java 8.

Es mucho más fácil y claro escribir

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

que escribir

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

Sin embargo, dentro de un caso, si cualquiera funcionará, el uso de == null es probablemente más fácil de leer, pero al final se reducirá a una preferencia de estilo.