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