Passage par référence ou valeur en Java
Java est un langage de passage par valeur, ce qui signifie que lorsque des arguments sont transmis à des méthodes , des copies des variables d'origine sont créées. Cela garantit l’intégrité des données et empêche toute modification involontaire. Cependant, il existe des scénarios où il peut être souhaitable de modifier les variables d'origine au lieu des copies.
Pass by Reference Equivalent en Java
En C, passez par référence permet aux variables d'être transmises par leur adresse mémoire, permettant ainsi de modifier les valeurs d'origine. Bien que Java ne dispose pas d'un mécanisme de passage par référence explicite, il existe plusieurs techniques qui peuvent obtenir un effet similaire :
1. Variable membre de classe :
Si la variable est un membre de classe, vous pouvez transmettre une instance de la classe à une méthode. Les modifications apportées à la variable membre dans la méthode seront reflétées dans l'objet d'origine.
2. Renvoi de la valeur modifiée :
Au lieu de passer par référence, vous pouvez modifier la valeur et la renvoyer depuis la méthode. L'appelant peut ensuite attribuer la valeur modifiée à la variable d'origine.
3. Classe ou variable statique :
Si la variable est déclarée comme une classe ou une variable statique, elle est accessible et modifiée globalement, y compris au sein des méthodes.
4. Array Trick :
Vous pouvez créer un tableau à un seul élément et le transmettre comme argument. Les modifications apportées à l'élément du tableau dans la méthode modifieront effectivement la valeur de la variable d'origine.
Exemple :
Considérez l'extrait de code Java suivant, où nous voulons modifier la variable toyNumber passée à la méthode play() :
public class XYZ { public static void main(String[] args) { int toyNumber = 5; XYZ temp = new XYZ(); temp.play(toyNumber); System.out.println("Toy number in main: " + toyNumber); } void play(int toyNumber) { System.out.println("Toy number in play: " + toyNumber); toyNumber++; System.out.println("Toy number in play after increment: " + toyNumber); } }
En utilisant l'une des techniques décrites ci-dessus, nous pouvons obtenir le résultat souhaité, où la variable toyNumber d'origine dans main() est modifiée :
Choix 1 (Variable de membre de classe) :
class Toy { int toyNumber; } public class XYZ { public static void main(String[] args) { Toy toy = new Toy(); toy.toyNumber = 5; XYZ temp = new XYZ(); temp.play(toy); System.out.println("Toy number in main: " + toy.toyNumber); } void play(Toy toy) { System.out.println("Toy number in play: " + toy.toyNumber); toy.toyNumber++; System.out.println("Toy number in play after increment: " + toy.toyNumber); } }
Choix 2 (Renvoi de la valeur modifiée) :
public class XYZ { public static void main(String[] args) { int toyNumber = 5; XYZ temp = new XYZ(); toyNumber = temp.play(toyNumber); System.out.println("Toy number in main: " + toyNumber); } int play(int toyNumber) { System.out.println("Toy number in play: " + toyNumber); toyNumber++; System.out.println("Toy number in play after increment: " + toyNumber); return toyNumber; } }
Choix 3 (Classe ou variable statique) :
class XYZ { static int toyNumber = 5; public static void main(String[] args) { XYZ temp = new XYZ(); temp.play(); System.out.println("Toy number in main: " + toyNumber); } void play() { System.out.println("Toy number in play: " + toyNumber); toyNumber++; System.out.println("Toy number in play after increment: " + toyNumber); } }
Choix 4 (Array Trick) :
public class XYZ { public static void main(String[] args) { int[] toyNumber = {5}; XYZ temp = new XYZ(); temp.play(toyNumber); System.out.println("Toy number in main: " + toyNumber[0]); } void play(int[] toyNumber) { System.out.println("Toy number in play: " + toyNumber[0]); toyNumber[0]++; System.out.println("Toy number in play after increment: " + toyNumber[0]); } }
Conclusion :
Bien que Java soit un langage de passage par valeur, plusieurs techniques peuvent être utilisées pour obtenir un comportement de type passage par référence. Le choix de la technique dépend du scénario et des exigences spécifiques.
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!