Le code suivant est-il sûr en Java? Ma préoccupation est due au fait que dans la fonction f()
la variable arr
est allouée sur la pile et en tant que telle est désaffectée à la sortie de la portée mais est toujours référencée en dehors de la portée.Utilisation de la variable de pile locale en dehors de la portée dans Java
public class Main {
public static class Array {
public final int[] arr;
public Array(int arr[]) {
this.arr = arr;
}
}
public static Array f() {
int arr[] = {1, 2, 3};
return new Array(arr);
}
public static void main(String[] args) {
Array a = f();
System.out.println(a.arr[0]);
System.out.println(a.arr[1]);
System.out.println(a.arr[2]);
}
}
La durée de vie de la variable 'arr' se termine lorsque' f' le fait, mais la durée de vie du * tableau * est distincte de la durée de vie de la variable. – user2357112
Vous n'avez pas à vous soucier de la gestion de la mémoire en Java. Si vous êtes habitué au C++, pensez aux pointeurs intelligents. – Dukeling
mais n'est toujours pas la variable de stockage de la variable 'Array' d'une variable dont la durée de vie est terminée? –