java.lang.NullPointException Pointeur nul Marche anormale sur le trou — a.equals (b)

Ordinaire, ce n'est que deux mots: paresse et paresse; le
succès n'est que deux mots: épreuve et diligence; l'
excellence n'est que deux mots: vous et moi.
Suivez-moi pour apprendre JAVA, le seau de la famille Spring et les connaissances sur le fonctionnement et la maintenance de Linux à partir de 0, et vous emmener d'un adolescent ignorant au sommet de la vie et épouser Bai Fumei!
Suivez le compte public WeChat [ IT est très fiable ], et partagez votre expérience technique chaque jour ~  

 

Pointeur nul NullPointException marche anormale sur la fosse - a.equals (b)

      Un bogue a été trouvé dans l'environnement de test aujourd'hui, la fameuse exception de pointeur nul java.lang.NullPointException . Ce problème est très facile à résoudre, car l'exception de pointeur nul n'est rien de plus que les quelques situations. Ici, j'ai rencontré l'un d'entre eux: a.equals (b), qui compare si les deux chaînes a et b sont égales .
     La cause du problème: je veux comparer si les deux chaînes a et b sont égales, mais j'ai oublié que a peut être nul, donc une exception de pointeur nul a été levée!
     Solution: dans le processus de travail et de production, comparez si deux chaînes ou objets sont égaux. Essayez de ne pas utiliser a.equals (b). Il est recommandé d'utiliser Objects.equals (a, b) à la place. Bien sûr, vous pouvez également utiliser Facultatif.
      Le code suivant illustre l'utilisation d'Objects.equals (b) pour comparer si deux objets sont égaux, en évitant la situation où une exception de pointeur null est levée lorsqu'un objet est nul.

import java.util.Objects;

public class Main {

  public static void main(String[] args) {
    equalsTest();
  }

  /**
   * 测试a.equals(b)和Objects.equals方法
   */
  private static void equalsTest() {
    String a = "1";
    String b = "1";
    System.out.println("a.equals(b):" + a.equals(b));

    try {
      a = null;
      b = "1";
      //这里会抛空指针异常!
      a.equals(b);
    } catch (Exception e) {
      System.out.println("a.equals(b)报空指针异常!");
      e.printStackTrace();
    }

    a = "1";
    b = "1";
    System.out.println("Objects.equals(a, b):" + Objects.equals(a, b));

    a = null;
    b = "1";
    System.out.println("Objects.equals(a, b)不报空指针异常:" + Objects.equals(a, b));
  }
}

      résultat de l'opération:

       Pourquoi Objects.equals (a, b) peut éviter de générer une exception de pointeur nul, nous devons analyser le code source (ci-dessous). Il peut être analysé à partir de la logique du code source:

       (1) Si a est nul et b est nul (a == b) est vrai;

       (2) Si a est nul et b n'est pas nul (a == b), il est faux;

       (3) Si a n'est pas nul, la méthode a.eauqls (b) est en fait appelée. Comme a n'est pas nul, une exception de pointeur nul ne sera pas levée.

    /**
     * Returns {@code true} if the arguments are equal to each other
     * and {@code false} otherwise.
     * Consequently, if both arguments are {@code null}, {@code true}
     * is returned and if exactly one argument is {@code null}, {@code
     * false} is returned.  Otherwise, equality is determined by using
     * the {@link Object#equals equals} method of the first
     * argument.
     *
     * @param a an object
     * @param b an object to be compared with {@code a} for equality
     * @return {@code true} if the arguments are equal to each other
     * and {@code false} otherwise
     * @see Object#equals(Object)
     */
    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

      Si vous avez des questions ou souhaitez en savoir plus, suivez le compte public WeChat!

Je suppose que tu aimes

Origine blog.csdn.net/IT_Most/article/details/109120664
conseillé
Classement