Organiser les pass / références Java and Go
J'ai étudié Java and Go jusqu'à présent. Le passage par valeur / passage par référence dans ces deux langages est organisé ici.
Définition en premier lieu
Passer par valeur
(appel par valeur): Une méthode pour faire une nouvelle copie de la valeur et la passer à l'argument de la méthode.
Passer par référence
(appel par référence): Une méthode pour passer une référence à la variable elle-même en tant qu'argument de méthode.
Pour Java
- Les arguments de la méthode sont passés à 100% "passer par valeur"
- Cependant, lorsqu'un objet Java est stocké dans une variable, ce qui y est stocké est une "valeur de référence" indiquant l'emplacement où l'objet est stocké.
- Par conséquent, lors du passage d'un objet comme argument, une copie de sa «valeur de référence» est transmise.
- Du coup, il est facile de se méprendre comme si "l'objet passé à l'argument était réécrit en passant par référence".
Pour aller
- Réalisez "passer par référence" en passant un pointeur comme argument.
- Golang structure / Array est un
type valeur
(contrairement aux objets Java). Autrement dit, une image qui sécurise une place pour stocker tous les champs / éléments et les stocke dans une variable représentant une structure.
- Par conséquent, si vous «passez par valeur» la structure, tous les champs seront copiés. Même si cela est réécrit, la structure d'origine n'est pas réécrite.
- D'autre part, map / slice est un «type de référence» (similaire aux objets Java). Autrement dit, ce qui est contenu dans la variable est un conteneur contenant le pointeur de l'élément, et l'image de suivre le pointeur pour accéder à chaque élément (Reference 26/09/19 0000)).
- Par conséquent, même si ceux-ci sont «passés par valeur», la carte / tranche d'origine sera réécrite. Par conséquent, cela n'a généralement pas de sens de «passer par pointeur», et ce n'est généralement pas le cas (reference).
Supplément
- Je l'ai écrit comme s'il était
passé par référence ≒ passé par pointeur
, mais les détails sont détaillés dans ici.
- L'explication du «type de valeur» / «type de référence» peut ne pas être exacte, veuillez donc la prendre comme une image uniquement.
référence