Récapitulatif du problème Java "Pass by Reference"

Aperçu

La stratégie de valorisation de Java est basée sur la valeur. Non passé par référence. Certaines personnes l'utilisent à tort comme «passe par référence» pour désigner le passage d'une valeur de référence. Il y a plusieurs personnes qui soulignent qu'il est mal utilisé, des gens qui le comprennent et l'utilisent, des gens qui ne le comprennent pas vraiment, et il semble qu'ils couvent, alors j'ai résumé l'information.

Stratégie d'évaluation

L'informatique a le concept de stratégie d'évaluation. Le passage par valeur (appel par valeur ou passage par valeur) et le passage par référence (appel par référence ou passage par référence) sont un type de stratégie de valorisation.

Pour plus d'informations:

Stratégie d'évaluation Java

La stratégie de valorisation de Java est basée sur la valeur. Lorsque vous transmettez des valeurs de référence et des références en Java, elles sont également évaluées en passant par valeur.

Cela est également indiqué dans la spécification du langage Java.

When the method or constructor is invoked, the values of the actual argument expressions initialize newly created parameter variables, each of the declared type, before execution of the body of the method or constructor.

Depuis http://docs.oracle.com/javase/specs/jls/se9/html/jls-8.html#jls-8.4.1 Ma traduction:

Lorsqu'une méthode ou un constructeur est appelé, initialise une nouvelle valeur d'argument formel de chaque type déclaré avec la ** valeur ** de la représentation réelle de la partie d'argument avant d'exécuter le corps de la méthode ou du constructeur.

Pour plus d'informations, lisez Java is Pass-by-Value, Dammit! écrit par Scott Stanchfield.

Bonne façon de penser la stratégie d'évaluation

Généralement, lors de l'examen d'une stratégie d'évaluation, il est préférable de réfléchir à la façon dont l'appel est évalué lorsqu'un programme qui appelle une fonction, une méthode, un sous-programme, etc. est entré dans le système de traitement du langage de programmation. La bonne façon de penser la stratégie.

Ne pensez pas au comportement lorsque vous exécutez réellement un programme ou un binaire. Le comportement du programme change complètement en fonction de l'environnement d'exécution du langage de programmation. Par exemple, le comportement réel est complètement différent selon que l'environnement d'exécution du programme est un compilateur, combien d'optimisation est effectuée, s'il s'agit d'un interprète ou si un humain "exécute" avec un tableau noir et une craie. Lorsque vous envisagez une stratégie d'évaluation d'un langage de programmation, ne pensez pas à ce que fait réellement le processeur, à la mémoire, à l'adresse, etc.

Opinion personnelle

Passer une référence en Java est appelé "passage par référence" et doit être ** immédiatement arrêté **. Comme vous pouvez le voir en recherchant par référence Java, certains articles sont clairement mal compris. Il doit y avoir des dizaines ou des centaines de fois ce nombre, certains qui sont incompris et non observés, et d'autres qui sont entraînés par une mauvaise utilisation et entravent leur compréhension. Si vous n'arrêtez pas de faire cela, vous perdrez l'industrie.

Recommended Posts

Récapitulatif du problème Java "Pass by Reference"
Java passe par valeur et passe par référence
Résumé orienté objet par les débutants (Java)
Résumé des connaissances Java
Résumé relatif à Java
[Java] Problème n ° 2
[Java] Problème n ° 3
Résumé du document Java 8
[Java] Problème n ° 1
Résumé du document Java 11
référence de la méthode java8
Matériaux de référence JAVA
Ma référence Java
[Java] Le mot passant par référence est mauvais!
[Java] Résumé de base de Java non couvert par Progate ~ Partie 1 ~
Résumé des nouvelles fonctionnalités de Java 12
[Résumé] Par exemple, préparation de l'environnement Java
Résumé des nouvelles fonctionnalités de Java 13
Résumé des révisions (nouveaux problèmes de yuan) par version Java
Résumé des connaissances requises pour réussir Java SE8 Silver
Java statique [Résumé personnel]
Si les arguments Java sont passés par valeur ou par référence
Résumé des threads sûrs ~ Java ~
Résumé de la spécialisation des primitives Java
Résumé du lien de développement Java
Résumé personnel sur Java
Résumé des nouvelles fonctionnalités de Java 10
résumé des expressions régulières java
Résumé des nouvelles fonctionnalités de Java 14
Résumé du support Java 2018
Résumé du modèle de conception Java
Résumé du mot réservé Java
Résumé approximatif du flux Java8
[Java] Résumé de base de Java non couvert par Progate ~ Partie 2 ・ Liste ~
Récapitulatif des valeurs renvoyées par la méthode des caractéristiques Spliterator #java
[Java] Référence de classe de wrapper Integer
Qu'est-ce que l'assertion Java? Résumé.
Référence du service Java VB.net à mi-chemin
[Java11] Résumé du flux -Avantages du flux-
Révision et résumé de Progate Java (débutant)
[Java] Résumé des expressions régulières
Problème d'addition à 1 chiffre de Zunda Java 11
Flux Java8, résumé de l'expression lambda
Expérience de passage Java SE8 Silver
Résumé des bases du langage Java
Astuces Java - Résumé de l'exécution de Spring
Résumé de la classe Java Math
[Java11] Résumé de l'utilisation du flux -Basics-
[Java] Résumé de la syntaxe de contrôle
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Résumé des opérations mathématiques
L'histoire de ne pas connaître le comportement de String en passant par Java