Java:判断字符串相等
PHPz
PHPz 2017-04-18 10:46:45
0
5
949
PHPz
PHPz

学习是最好的投资!

répondre à tous(5)
黄舟
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.

左手右手慢动作

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

PHPzhong

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();
左手右手慢动作
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();
洪涛

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal