Table des matières
Java est-il transmis par valeur ou par référence ?
Maison Problème commun Java est-il passé par valeur ou par référence ?

Java est-il passé par valeur ou par référence ?

Sep 08, 2022 pm 02:47 PM
java

Java est un transfert de valeur ; le transfert de valeur signifie transmettre une copie des paramètres réels à la méthode lors de l'appel d'une méthode, de sorte que si les paramètres sont modifiés dans la méthode, cela n'affectera pas les paramètres réels lorsqu'un type de base est transmis ; Lorsqu'un type de référence est transmis, une copie de la valeur est transmise et les modifications apportées à la variable copiée n'affectent pas la variable d'origine. Lorsqu'un type de référence est transmis, une copie de l'adresse de référence est transmise, mais l'adresse copiée et le ; Les adresses réelles pointent toutes deux vers les mêmes données réelles, donc la valeur de la variable d'origine peut être modifiée.

Java est-il passé par valeur ou par référence ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, ordinateur DELL G3.

Java est-il transmis par valeur ou par référence ?

Java est transmis par valeur.

Lorsqu'un type de base est transmis, une copie de la valeur est transmise et les modifications apportées à la variable copiée n'affectent pas la variable d'origine ; lorsqu'un type de référence est transmis, une copie de l'adresse de référence est transmise, mais la variable copiée est transmise. l'adresse est différente de la vraie Les adresses pointent vers les mêmes données réelles, donc la valeur dans la variable d'origine peut être modifiée lorsque le type String est passé, bien que l'adresse de référence soit copiée et pointe vers les mêmes données, la valeur String ne peut pas être modifié, donc la valeur de la variable d'origine ne peut pas être modifiée.

Tout d’abord, expliquons ce qui passe par référence et ce qui passe par valeur.

  • Le passage par référence fait référence au fait de transmettre l'adresse des paramètres réels directement à la méthode lors de l'appel de la méthode. Ensuite, la modification des paramètres dans la méthode affectera les paramètres réels.

  • Passer par valeur signifie transmettre une copie des paramètres réels à la méthode lors de l'appel d'une méthode, de sorte que si les paramètres sont modifiés dans la méthode, les paramètres réels ne seront pas affectés.

Donc en Java, est-ce un passage par référence ou un passage par valeur ? En fait, cette question a été débattue en permanence et le responsable n'a pas donné de réponse définitive. Mais d'après ce que je comprends, Java est un transfert de valeur.

Regardons d'abord un exemple simple :

public void test() {
    int a = 1;
    change(a);
    System.out.println("a的值:" + a);
}
private void change(int a) {
    a = a + 1;
}
// 输出
a的值:1

définit une variable de type de base a dans la méthode test(), puis appelle la méthode change() pour essayer de modifier la variable, et la valeur d'origine est toujours affichée.

Tout d'abord, il faut être clair que les variables locales d'une méthode sont stockées sur la pile. S'il s'agit d'une variable de type basique, la valeur de cette variable est stockée directement. S'il s'agit d'une variable de type référence, l'adresse de. la valeur est stockée, pointant vers la valeur spécifique dans le tas.

Dans l'exemple ci-dessus, le a transmis lors de l'appel de la méthode change() est en fait une copie de la variable a, pas le vrai a. Ce qui est modifié dans la méthode change() est une copie, qui n'a aucun effet sur le a. vrai un.

En regardant les choses de cette façon, Java est bien un transfert de valeur, mais si nous regardons l'exemple suivant, vous serez confus

public void test() {
   User user = new User();
   user.setAge(18);
   change(user);
   System.out.println("年龄:" + user.getAge());
}
private void change(User user) {
   user.setAge(19);
}
// 输出
年龄:19

Regardez, les propriétés de l'objet ont été modifiées, n'est-ce pas un transfert de valeur ? ne change pas, ceci À ce moment-là, quelqu'un a conclu que lorsque la valeur transmise est un type de base, elle est transmise par valeur, et lorsque la valeur transmise est un type référence, elle est transmise par référence. Est-ce vraiment le cas ?

Pour analyser ce problème, nous devons savoir comment les variables sont stockées dans jvm.

Premièrement regardez le type de base. C'est très simple. La variable stocke la valeur directement sur la pile. Ce qui est transmis à la méthode change() est une copie de la variable, donc les modifications apportées à la variable copiée n'affecteront pas la valeur. valeur de la variable d'origine.

Ensuite, regardez le type de référence. La variable stockée dans la pile est l'adresse de référence. Cette adresse pointe vers la valeur spécifique dans le tas, comme indiqué ci-dessous :

Java est-il passé par valeur ou par référence ?

Lorsque la méthode change() est appelée. passe dans la variable, la variable est également copiée, mais la copie ici n'est que l'adresse de référence dans la pile, et ne copie pas les données dans le tas, elle deviendra donc comme l'image suivante :

Java est-il passé par valeur ou par référence ?

Bien que le La variable est copiée, l'adresse pointée est la même, donc l'adresse dans la variable est Lorsque les données sont modifiées, cela affectera toujours la variable réelle d'origine. Cependant, si nous modifions l'adresse de la variable sur la pile, cela affectera. n'affecte pas la variable d'origine. Par exemple, le code suivant :

public void test() {
   User user = new User();
   user.setAge(18);
   change(user);
   System.out.println("年龄:" + user.getAge());
}
private void change(User user) {
   user = new User();
   user.setAge(19);
}
// 输出
年龄:18

Il s'agit de modifier la variable sur la pile. L'adresse dans n'affectera pas la variable d'origine.

À ce stade, tout le monde le comprend presque, mais en repensant à la question d'origine, une variable de type String est transmise. String est un type de référence. Il va de soi que la variable d'origine sera modifiée. Pourquoi le résultat. inchangé ?

La variable String est assez spéciale. Nous pouvons voir dans le code source de String que la valeur de String est conservée via le tableau char[] interne, mais ces données sont définies comme type final. Par conséquent, la valeur de String est immuable. Lorsque nous modifions habituellement la valeur de String, nous créons en fait un nouvel objet String. Par exemple, dans le code suivant :

String a = "hello";
a = "world";

Dans ce code, la variable a n'est pas réellement modifiée en world, mais un nouvel objet String est créé. Cet objet La valeur de est world, et l'adresse de référence de cet objet est attribuée à a. Le hello d'origine est toujours dans le tas, mais cette valeur n'est pas référencée et sera récupérée par gc après un certain temps.

Les changements dans la mémoire de la valeur passée par la variable String sont les suivants :

Java est-il passé par valeur ou par référence ?

String copie l'adresse de la variable, mais elle ne peut pas modifier la valeur de la chaîne d'origine. Étant donné que String est immuable, un nouvel objet String est créé dans la méthode change(), et ce qui change est la valeur du nouvel objet. La variable d'origine n'a aucun effet.

Pour plus de connaissances connexes, veuillez visiter la rubrique FAQ !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Guide de construction d'Agnes Tachyon | Un joli Musume Derby
2 Il y a quelques semaines By Jack chen
Oguri Cap Build Guide | Un joli Musume Derby
3 Il y a quelques semaines By Jack chen
Péx: comment raviver les joueurs
4 Il y a quelques semaines By DDD
Guide de construction de Grass Wonder | Uma musume joli derby
1 Il y a quelques semaines By Jack chen
Pic comment émoter
3 Il y a quelques semaines By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Conseils pour écrire des commentaires PHP Conseils pour écrire des commentaires PHP Jul 18, 2025 am 04:51 AM

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plutôt que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de tâches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les coûts de communication et améliorer l'efficacité de la maintenance du code.

Améliorer la lisibilité avec les commentaires Améliorer la lisibilité avec les commentaires Jul 18, 2025 am 04:46 AM

La clé pour écrire de bons commentaires est d'expliquer "pourquoi" plutôt que "ce qui a été fait" pour améliorer la lisibilité du code. 1. Les commentaires devraient expliquer des raisons logiques, telles que les considérations derrière la sélection de la valeur ou le traitement; 2. Utilisez des annotations de paragraphe pour une logique complexe pour résumer l'idée globale des fonctions ou des algorithmes; 3. Maintenir régulièrement des commentaires pour garantir la cohérence avec le code, éviter les tromperies et supprimer le contenu obsolète si nécessaire; 4. Vérifiez de manière synchrone les commentaires lors de l'examen du code et enregistrez la logique publique via des documents pour réduire le fardeau des commentaires du code.

Rédaction de commentaires PHP efficaces Rédaction de commentaires PHP efficaces Jul 18, 2025 am 04:44 AM

Les commentaires ne peuvent pas être négligents car ils veulent expliquer les raisons de l'existence du code plutôt que des fonctions, telles que la compatibilité avec les anciennes interfaces ou les restrictions tierces, sinon les personnes qui lisent le code ne peuvent s'appuyer que sur de la devinettes. Les zones qui doivent être commentées comprennent des jugements conditionnels complexes, une logique spéciale de gestion des erreurs et des restrictions de dérivation temporaires. Une façon plus pratique d'écrire des commentaires consiste à sélectionner des commentaires en une seule ligne ou à bloquer les commentaires en fonction de la scène. Utilisez des commentaires sur le bloc de documents pour expliquer les paramètres et les valeurs de retour au début des fonctions, des classes et des fichiers, et gardez les commentaires à jour. Pour une logique complexe, vous pouvez ajouter une ligne à la précédente pour résumer l'intention globale. En même temps, n'utilisez pas de commentaires pour sceller le code, mais utilisez des outils de contrôle de version.

Commentaires PHP efficaces Commentaires PHP efficaces Jul 18, 2025 am 04:33 AM

La clé pour rédiger des commentaires PHP est claire, utile et concise. 1. Les commentaires devraient expliquer l'intention derrière le code plutôt que de simplement décrire le code lui-même, comme expliquer l'objectif logique des jugements conditionnels complexes; 2. Ajouter des commentaires aux scénarios clés tels que les valeurs magiques, la compatibilité du code ancien, les interfaces API, etc. pour améliorer la lisibilité; 3. Évitez le contenu du code en double, gardez-le concis et spécifique et utilisez des formats standard tels que PHPDOC; 4. Les commentaires doivent être mis à jour de manière synchrone avec le code pour garantir la précision. De bons commentaires doivent être pensés du point de vue des autres, réduire le coût de la compréhension et devenir un dispositif de navigation de compréhension du code.

Configuration de l'environnement de développement PHP Configuration de l'environnement de développement PHP Jul 18, 2025 am 04:55 AM

La première étape consiste à sélectionner le package d'environnement intégré XAMPP ou MAMP pour créer un serveur local; La deuxième étape consiste à sélectionner la version PHP appropriée en fonction des besoins du projet et de configurer la commutation de la version multiple; La troisième étape consiste à sélectionner VScode ou PhpStorm comme éditeur et déboguer avec xdebug; De plus, vous devez installer Composer, PHP_CODESNIFFER, PHPUNIT et d'autres outils pour aider au développement.

PHP commentant la syntaxe PHP commentant la syntaxe Jul 18, 2025 am 04:56 AM

Il existe trois façons courantes d'utiliser les commentaires PHP: les commentaires en une seule ligne conviennent à l'explication brièvement de la logique de code, telle que // ou # pour l'explication de la ligne actuelle; Commentaires multi-lignes /*...*/ convient à une description détaillée des fonctions ou des classes; COMMENTAIRES DOCUMENTS DOCBLOCK Commencez par / ** pour fournir des informations rapides pour l'IDE. Lorsque vous l'utilisez, vous devez éviter les bêtises, continuez à mettre à jour de manière synchrone et n'utilisez pas de commentaires pour bloquer les codes pendant longtemps.

Opérateurs de comparaison PHP Opérateurs de comparaison PHP Jul 18, 2025 am 04:57 AM

Les opérateurs de comparaison PHP doivent faire attention aux problèmes de conversion de type. 1. Utiliser == pour comparer les valeurs uniquement, et la conversion de type sera effectuée, comme 1 == "1" est vraie; 2. Utilisation === Pour nécessiter la même valeur que le type, tel que 1 === "1" est faux; 3. La comparaison de taille peut être utilisée sur les valeurs et les chaînes, telles que "Apple"

Comprendre les commentaires PHP Comprendre les commentaires PHP Jul 18, 2025 am 04:24 AM

Les commentaires PHP sont des parties du code utilisées pour interpréter la logique, les tâches de balise ou bloquer temporairement le code et ne sont pas exécutées par le serveur. Ses fonctions principales incluent: 1. Améliorer la lisibilité du code, ce qui facilite une compréhension rapide des autres et du moi futur; 2. Prend en charge deux formats: commentaires en une seule ligne (// ou #) et commentaires multi-lignes (//); 3. Common utilise des descriptions de fonctions de couverture, des explications logiques complexes, des marques de TODO et du code de désactivation pendant le débogage; 4. Les commentaires efficaces devraient éviter le code en double, expliquer les raisons plutôt que les opérations, le garder concis et ajouter des enregistrements de version si nécessaire, améliorant ainsi considérablement l'efficacité de maintenance du code.