Ok, c'est ainsi que fonctionnent les types de données en Java. (Vous devez excuser mon anglais, je n'utilise probablement pas le bon vocabulaire. Vous devez différencier deux d'entre eux. Les types de données de base et les types de données normaux. Les types de données de base constituent à peu près tout ce qui existe. Par exemple, il sont tous des nombres, char, booléens, etc. Les types de données normaux ou les types de données complexes sont tout le reste Une chaîne est un tableau de caractères, donc un type de données complexe.
Chaque variable que vous créez est en fait un pointeur sur la valeur dans votre mémoire. Par exemple:
String s = new String("This is just a test");
la variable "s" ne contient PAS de chaîne. C'est un indicateur. Ce pointeur pointe sur la variable dans votre mémoire. Lorsque vous appelez System.out.println(anyObject)
, la toString()
méthode de cet objet est appelée. S'il n'a pas remplacé toString
Object, il imprimera le pointeur. Par exemple:
public class Foo{
public static void main(String[] args) {
Foo f = new Foo();
System.out.println(f);
}
}
>>>>
>>>>
>>>>Foo@330bedb4
Tout ce qui se trouve derrière le "@" est le pointeur. Cela ne fonctionne que pour les types de données complexes. Les types de données primitifs sont enregistrés DIRECTEMENT dans leur pointeur. Donc en fait, il n'y a pas de pointeur et les valeurs sont stockées directement.
Par exemple:
int i = 123;
Je ne stocke PAS de pointeur dans ce cas. je vais stocker la valeur entière 123 (en octet ofc).
Bon alors revenons à l' ==
opérateur. Il compare toujours le pointeur et non le contenu enregistré à la position du pointeur dans la mémoire.
Exemple:
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
Ces deux chaînes ont un pointeur différent. String.equals (String other) compare cependant le contenu. Vous pouvez comparer des types de données primitifs avec l'opérateur '==' car le pointeur de deux objets différents avec le même contenu est égal.
Null signifierait que le pointeur est vide. Un type de données primitif vide par défaut est 0 (pour les nombres). Null pour tout objet complexe signifie cependant que cet objet n'existe pas.
Salutations
null
n'a aucune méthode, donc pas non plusequals()
. SimyString
c'était le casnull
, comment invoqueriez-vous une méthode dessus? :)