J'ai un problème avec la compréhension de l'action de Java dans l'exemple suivant « passage par valeur »:Java, passer par valeur, les variables de référence
public class Numbers {
static int[] s_ccc = {7};
static int[] t_ccc = {7};
public static void calculate(int[] b, int[] c) {
System.out.println("s_ccc[0] = " + s_ccc[0]); // 7
System.out.println("t_ccc[0] = " + t_ccc[0]); // 7
b[0] = b[0] + 9;
System.out.println("\nb[0] = " + b[0]); // 16
c = b;
System.out.println("c[0] = " + c[0] + "\n"); // 16
}
public static void main(String[] args) {
calculate(s_ccc, t_ccc);
System.out.println("s_ccc[0] = " + s_ccc[0]); // 16
System.out.println("t_ccc[0] = " + t_ccc[0]); // 7
}
}
Je le sais parce s_ccc est une référence variable, quand je le donne à la méthode calculate() et que je fais quelques changements à ses éléments dans la méthode, les changements restent même après que j'ai quitté la méthode. Je pense que la même chose devrait être avec t_ccc. C'est à nouveau une variable de référence, je la donne à la méthode calculate(), et dans la méthode je change la référence à t_ccc pour qu'elle soit celle de s_ccc. Maintenant t_ccc devrait être une variable de référence pointant vers un tableau, qui a un élément de type entier égal à 16. Mais quand la méthode calculate() est à gauche, il semble que t_ccc pointe son ancien objet. Pourquoi cela arrive-t-il? Le changement ne devrait-il pas rester pour lui aussi? C'est une variable de référence après tout.
Cordialement
Voulez-vous dire calculer (s_ccc, t_ccc) au lieu de calculer (s_ccc, s_ccc)? –
Oui, exactement! Je veux dire calculer (s_ccc, t_ccc). Je suis désolé. – user42155
@gemm: Pourriez-vous modifier votre message s'il vous plaît? –