recherche

Maison  >  Questions et réponses  >  le corps du texte

Java:判断字符串相等

PHPzPHPz2897 Il y a quelques jours1004

répondre à tous(5)je répondrai

  • 黄舟

    黄舟2017-04-18 10:48:45

    String a = new String("abc");
    a = a.intern();
    
    String b = "abc";
    
    if (a == b) {
        System.out.println("相等");
    } else {
        System.out.println("不等");
    }

    Vous avez appelé la méthode a.intern(), mais vous n'avez pas réaffecté le résultat renvoyé a est toujours l'original a.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

    Utilisez equals() pour juger de l'égalité des chaînes. Cette question a même échoué en Java !

    répondre
    0
  • PHPz

    PHPz2017-04-18 10:48:45

    a.intern(); ne changera pas la référence du caractère a, il a une valeur de retour.
    Les suivants seront égaux

    String b = a.intern();

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

    String a = new String("abc");
    

    Ici a et "abc" sont deux objets. Lorsque la méthode interne est appelée, le pool de constantes de caractères contient déjà une chaîne égale à cet objet, donc l'appel de la méthode interne est inutile, même s'il est suivi de b=" abc", b et a ne sont pas le même objet.

    Si vous souhaitez que le résultat soit égal, soit la première phrase devient :

    String a = "abc";

    Ou la deuxième phrase devient :

    a = a.intern();
    

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:48:45

    La première chose à savoir est que l'opération == détermine si deux objets ou types de base a et b pointent vers la même zone mémoire

    L'implémentation sous-jacente de

    String est
    private final value[]
    Lorsque String est instancié, il divise en fait une mémoire continue pour enregistrer le tableau de caractères via System.arraycopy.

    new String("abc") n'est en fait pas recommandé pour initialiser String de cette manière. L'implémentation réelle nécessite une étape de plus que a = "abc".

    1. Divisez l'espace mémoire et créez un tableau temporaire temporaire

    2. temp[0] = 'a';temp[1] = 'b';temp[2] = 'c';

    3. Créez la valeur du tableau et pointez l'espace mémoire pointé par valeur vers l'espace mémoire pointé par temp, c'est-à-dire &value = &temp (si a = "abc" est utilisé, cette étape n'est pas obligatoire)

    La méthode interne est une méthode fournie par jdk1.5 et est utilisée pour l'optimisation de la mémoire. La même chaîne fait référence au même espace mémoire, qui est en fait la troisième étape ci-dessus. Si a et b sont égaux ici, cela peut s'écrire

    String a = "abc";
    String b = "abc".intern(); 或者String b = a.intern();

    L'opération réelle est la troisième étape ci-dessus, c'est-à-dire b = a;

    L'implémentation sous-jacente réelle de

    String b = "abc" est :

    1. Divisez l'espace mémoire et créez une valeur de tableau

    2. valeur[0] = a.value[0];value[1] = a.value[0]';value[2] = a.value[0];

    Dans la deuxième étape, value[0] dans String a in value[0] dans String b pointe en fait vers la même adresse mémoire, donc en fait b.value[0] = a.value[0 ] = 'a ', mais b.value n'est pas égal à a.value La raison fondamentale est que les zones mémoire pointées sont différentes

    .

    Il est recommandé de jeter un œil à l'analyse du code source de String

    [Analyse du code source JAVA - Java.lang] Analyse du code source de String

    répondre
    0
  • Annulerrépondre