Maison >Java >javaDidacticiel >Java transmet-il les primitives par référence ?

Java transmet-il les primitives par référence ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-07 17:45:021039parcourir

Does Java Pass Primitives by Reference?

Passage par référence pour les primitives en Java

Java utilise le passage par valeur, contrairement à C , qui utilise le passage par référence. Cela peut créer des scénarios dans lesquels la modification d'un type de données primitif (par exemple, int, float) dans une méthode n'affecte pas sa valeur en dehors de la méthode.

Considérez ce code Java :

public class XYZ {
    public static void main() {
        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);
    }
}

Ce code s'affiche :

Toy number in play 5
Toy number in play after increment 6
Toy number in main 5

La variable toyNumber n'est pas modifiée en dehors de la méthode play() car elle est passée par valeur.

Alternatives au passage par référence en Java :

Pour imiter le passage C par référence en Java pour les primitives, plusieurs options sont disponibles :

1. Variable membre publique :

Créez une classe avec une variable membre publique pour toyNumber et transmettez une référence à la classe.

class MyToy {
    public int toyNumber;
}
void play(MyToy toy) {
    System.out.println("Toy number in play " + toy.toyNumber);
    toy.toyNumber++;
    System.out.println("Toy number in play after increment " + toy.toyNumber);
}

2. Valeur de retour :

Au lieu de passer par référence, renvoyez la valeur modifiée de la méthode.

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;
}

Dans la méthode principale, mettez à jour toyNumber en utilisant la valeur renvoyée.

3. Classe/Variable statique :

Si les méthodes play() et main() font partie de la même classe, convertissez toyNumber en variable membre de classe.

4. Tableau d'un élément :

Il s'agit d'un hack mais implique de transmettre un tableau à un seul élément et de modifier sa valeur.

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]);
}

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:
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