Ici aussi les opérateurs amènent au même résultat, voyons un cas où ça se complique :
String prenom1 = new String("Maxime");
String prenom2 = new String("Maxime");
System.out.println(prenom1 == prenom2); //false
System.out.println(prenom1.equals(prenom2)); //true
Dans ce dernier cas, les valeurs retournées par les deux comparaisons diffèrent.
La valeur des deux Strings est identique, pourtant la comparaison avec l’opérateur « == » renvoie faux. Cela signifie que contrairement à ce que l’on pourrait penser, cet opérateur ne compare pas les valeurs données aux Strings.
Dans ce cas, les deux variables pointent vers la même adresse :
Comme il y a déjà une String avec la valeur désirée, prenom2 va pointer vers l’adresse de celle-ci. C’est pourquoi prenom1 et prenom2 ont le même Hash Code.
Ici, les valeurs des Strings sont différentes, prenom1 et prenom2 pointent donc logiquement vers des adresses différentes.
String prenom1 = new String("Maxime");
String prenom2 = new String("Maxime");
System.out.println(prenom1 == prenom2); //false
System.out.println(prenom1.equals(prenom2)); //true
System.out.println(System.identityHashCode(prenom1)); //168423058
System.out.println(System.identityHashCode(prenom2)); //821270929
Ce dernier cas est plus complexe. En effet, même si une String avec la valeur « Maxime » existe déjà, l’instruction « new » va créer une nouvelle String sans contrôler le fait qu’une String avec la même valeur existe déjà. La variable « prenom2 » va pointer vers cette nouvelle String alors que « prenom1 » va pointer vers la première String. C’est pour cette raison que ces deux variables ont un Hash Code différent.
Conclusion
La méthode. equals() est à utiliser pour comparer la valeur de deux Strings tandis que l’opérateur « == » les compare par référence. Pour aller plus loin et comprendre un peu mieux comment ça se traduit dans la JVM, vous pouvez vous rendre sur cet article (https://www.geeksforgeeks.org/string-constant-pool-in-java/).
On va voir comment avoir en quelques minutes des assertions qui vont vérifier les endpoints de notre API avec des scénarios de ce genre:
Feature: Create a new account
As a visitor,
I can create an account to access the game
Scenario: A visitor creates an account
When I fill the login form with
| email | password |
| [email protected] | Jh0...
Depuis .NET 9, le le support d’OpenAPI est directement inclus dans .NET et ne passe plus par les librairies Swagger par défaut (plus d’info sur ce choix ici si jamais ça vous intéresse).
De façons simplifiée, la librairie Swashbuckle.AspNetCore.Sw...
Description du problème
Par défaut, il n’est pas autorisé de faire des requêtes entre une application qui est dans un domaine A vers une autre qui serait dans un domaine B (pour des raisons de sécurité, il y a plus de détails dans les sources).
S...
On va créer pas-à-pas un raccourci qui nous permettra de générer un IBAN et de l’insérer à l’endroit où se trouve notre curseur. Si vous n’avez pas fait le setup pour développer un plugin Jetbrains, je vous invite à lire notre article sur le sujet.
...