Les valeurs données aux arguments des méthodes Java sont fondamentalement passées par valeur. Passer par valeur signifie que la valeur donnée à l'argument est copiée. Ainsi, si des modifications sont apportées aux arguments de la méthode, cela signifie que la copie des arguments est modifiée.
Par conséquent, vous pouvez comprendre que le mouvement est le suivant.
Le programme le plus simple pour comprendre le passage par valeur
int count = 8;
plus(count);
Log.d(count);
void plus(int value) {
int result = value * 2;
Log.d(result);
}
résultat
after applying plus 16
outside of method plus 8
Si vous passez un type de référence comme argument, la valeur de référence sera copiée.
Dans le code ci-dessous, le côté gauche est la valeur de référence et le côté droit est la valeur réelle. La valeur de référence sur le côté gauche est, par exemple, l'adresse de la mémoire où la valeur réelle sur le côté droit est stockée.
List<String> list = new ArrayList<>();
Il y a une résidence impériale à «1-1 Chiyoda, Chiyoda-ku, Tokyo». «1-1 Chiyoda, Chiyoda-ku, Tokyo» est la valeur de référence, et le palais impérial est comme la valeur réelle.
Sur la base de ce qui précède, je voudrais envisager le programme suivant.
Un programme dans lequel les changements dans une méthode sont reflétés même après l'application de la méthode
List<String> japanese = new ArrayList<>();
japanese.add("Trop");
plusElementJ(japanese);
Log.d(japanese.toString());
void plusElementJ(List<String> list) {
list.add("Bonjour");
Log.d(list.toString());
}
résultat
[Trop,Bonjour]
[Trop,Bonjour]
Dans le programme ci-dessus, la 12ème ligne déclare qu'il y a une résidence impériale à «1-1 Chiyoda, Chiyoda-ku, Tokyo». Transmettez l'adresse «1-1 Chiyoda, Chiyoda-ku, Tokyo» à la méthode. Dans la méthode, nous avons fait une extension à l'adresse que nous avons reçue. Ensuite, même si je sortais de la méthode, j'étais convaincu qu'il y avait un résultat de l'agrandissement du palais impérial et celui-ci en «1-1 Chiyoda, Chiyoda-ku, Tokyo».
Les changements de méthode ne sont pas reflétés après l'application de la méthode
String name = "Trop";
concatenate(name);
Log.d(name);
void concatenate(String name) {
name = "Bonjour," + name;
Log.d(name);
}
résultat
après avoir appliqué le concaténat Bonjour, trop
en dehors de la méthode concaténer aussi
String est un type de référence, mais immuable. Autrement dit, il ne peut pas être changé. Par conséquent, ce processus ne crée-t-il pas en interne un nouvel objet String comme indiqué ci-dessous?
name = new String("Bonjour," + name)
Par conséquent, je pense que les choses suivantes se produisent.
Je ne peux plus dire qu'il est passé par référence
Recommended Posts