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/).
Votre changelog reprend les fonctionnalités que vous avez réalisé entre deux versions, ça tombe bien, votre historique git contient ces informations :) On va voir comment les extraire de git pour générer automatiquement un changelog exhaustif et fiable.
Le principe
Pour faciliter la maintenance de votre projet, il est d’usage d’avoir des commits parlants afin que tous les d...
Photo by Yancy Min on Unsplash
Contexte
Je suis développeur au quotidien et j'aime développer en dehors du travail également.
Parfois, il peut m’arriver de faire un kata entre midi et deux par exemple. J'aime bien du coup garder une trace de mon exerc...
On va prendre un cas concret: j’ai fait un commit et en relisant ma merge request, je me rend compte que certains fichiers ne devraient pas y être:
Dans mon cas c’est le fichier src/test/java/com/globaldashboard/unit/dependencies/domain/PomUrlTest.java
...
Dans une application Spring, sauf exceptions, les Beans sont proxifiés. En d’autres mots, on n'interagit pas directement avec eux et ce mécanisme est à la base de l’AOP.
Beaucoup de mécanismes s'appuient sur l’AOP (les Transactions par exemple) et conn...