Maison >Java >javaDidacticiel >Pourquoi la modification d'une variable dans un bloc « enfin » n'affecte-t-elle pas la valeur de retour en Java ?

Pourquoi la modification d'une variable dans un bloc « enfin » n'affecte-t-elle pas la valeur de retour en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-02 06:09:11504parcourir

Why Does Modifying a Variable in a `finally` Block Not Affect the Return Value in Java?

Pourquoi la modification d'une variable dans un bloc final n'affecte-t-elle pas la valeur de retour ?

En Java, il est généralement entendu que le bloc final ne doit pas affecter la valeur de retour de la méthode. Cependant, la raison pour laquelle c'est le cas peut prêter à confusion, en particulier lorsque la valeur de retour est modifiée dans le bloc final.

Considérez l'exemple suivant :

public class Test {

    private String s;

    public String foo() {
        try {
            s = "dev";
            return s;
        } 
        finally {
            s = "override variable s";
            System.out.println("Entry in finally Block");  
        }
    }

    public static void main(String[] xyz) {
        Test obj = new Test();
        System.out.println(obj.foo());
    }
}

La sortie de ce code est :

Entry in finally Block
dev

Pourquoi s n'est-il pas remplacé dans le bloc final, alors que le contrôle est imprimé sortie ?

Explication

Le bloc try se termine par l'exécution de l'instruction return. La valeur de s au moment de l'exécution de l'instruction return est la valeur renvoyée par la méthode. Le fait que la clause final modifie ultérieurement la valeur de s (une fois l'instruction return terminée) ne modifie pas (à ce stade) la valeur de retour.

Dans l'exemple ci-dessus, l'instruction return dans le bloc try définit la valeur de retour à "dev". Le bloc final définit ensuite s sur "remplacer la variable s", mais ce changement se produit une fois que la valeur de retour a déjà été définie. Par conséquent, la valeur de retour est toujours "dev".

Il est important de noter que ce comportement ne s'applique qu'aux modifications de la valeur des variables primitives ou des objets immuables. Si s était une référence à un objet mutable et que le contenu de l'objet était modifié dans le bloc final, alors ces modifications seraient visibles dans la valeur renvoyée.

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