Maison  >  Article  >  Java  >  Partage comparatif sur String.equals et == en Java

Partage comparatif sur String.equals et == en Java

黄舟
黄舟original
2017-08-20 09:36:371469parcourir

Cet article présente principalement des informations pertinentes sur la comparaison entre String.equals et == en java. Les amis qui en ont besoin peuvent s'y référer

Comparaison entre String.equals et == en java<.>

J'apprends Java depuis un moment, mais hier soir j'ai été soudainement contrarié par "asd"==getpara("password") : en effet, beaucoup de choses en JAVA sont complètement différentes des langages ​​J'ai déjà été exposé à. , comme le plus simple new String("asd") !=new String ("asd").


1 Le programme le plus simple :

public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = "Hello";
    System.out.println(s1 == s2);
  }
}

Certainement, beaucoup de gens disent, sortie vrai, en effet la sortie est vraie, s1 et s2 font référence à la même chose. Mais si ce programme était écrit différemment, il serait certainement différent.

2 Première variante :

public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = new String("Hello");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
  }
}

ou :

public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
  }
}

Ensuite, le résultat est un peu incertain. Certaines personnes ont de mauvaises idées si elles sont prises séparément, au moins l'une d'entre elles ne sera certainement pas égale.

Les résultats de ces deux programmes sont faux. La raison est très simple. JAVA est un langage fondamentalement entièrement orienté objet. s1 == s2 détermine sa référence (équivalente à l'adresse mémoire et au pointeur). la propre méthode de l'objet pour déterminer si les valeurs sont égales.

Dans l'expression suivante :

String s1 = "Hello";
String s2 = new String("Hello");

La JVM reçoit deux messages différents :


1. Je veux créer une chaîne "Bonjour".

2. Je souhaite créer une nouvelle chaîne "Bonjour", différente de celle d'origine.

Donc, s1 != s2.

3 La deuxième variante :

Arrangement séquentiel :


public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    String s3 = "Hello";
    s1=s1.intern();
    s2=s2.intern();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s2);
    System.out.println(s3.equals(s2));
  }
}

Mélangez la commande :


public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s3 = "Hello";
    s1=s1.intern();
    String s2 = new String("Hello");
    s2=s2.intern();
    //也可以String s2 = new String("Hello").intern();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s2);
    System.out.println(s3.equals(s2));
  }
}

Alors cette fois ça devrait être clair =


deux objets, mais il y a quelques choses timides ajoutées au milieu, donc la réponse doit être vraie vraie vraie vraie.


Alors, qu'est-ce qu'un stagiaire exactement ?

4 fonctions internes :

Lors de l'appel de la méthode interne, si le pool contient déjà une chaîne égale à cet objet String (l'objet est représenté par des égaux (Object )), la chaîne du pool est renvoyée.


Sinon, ajoutez cet objet String au pool et renvoyez une référence à cet objet String.

Situations applicables de stagiaire : situations dans lesquelles plusieurs grandes chaînes identiques apparaissent en même temps, comme la conception d'une file d'attente de messages où plusieurs messages identiques peuvent apparaître.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn