Les variables de tableau Java sont des types de référence.
Je pense que c'est une chose de base naturelle, mais depuis que je faisais à l'origine PHP, Pour mon propre mémorandum, je l'ai résumé un peu.
Par exemple, dans le cas du code suivant, 100 est émis.
int[] a = { 1, 2, 3 };
int[] b = a;
b[0] = 100;
System.out.println(a[0]);
// a[0]Sorties 100.
Cela est dû au fait que les variables de tableau Java sont des types de référence, donc un tableau a été créé pour int [] a Parce que l'adresse mémoire est stockée.
Par exemple, si l'adresse mémoire du tableau créé par int [] a est ABC123 (je ne pense pas qu'il existe réellement une telle adresse mémoire), Le tableau a est enregistré à cette adresse mémoire (emplacement) appelée ABC123.
Et comme ABC123, qui est l'adresse mémoire de la variable de tableau int [] a, est contenu dans int [] b, le fait est qu'il s'agit du même tableau. Par conséquent, b [0] = 100 équivaut à a [0] = 100.
Si vous écrivez le même code ci-dessous en PHP, 1 sera affiché au lieu de 100.
$a = [1,2,3];
$b = $a;
$b[0] = 100;
echo $a[0];
//1 est la sortie
Ce n'est pas un type de référence en PHP, il est passé par valeur, donc Ceci est dû au fait que le tableau de \ $ a lui-même est copié et passé à \ $ b, pas à l'adresse mémoire de \ $ a.
En PHP, pour en faire un type de référence, il faut ajouter \ & comme indiqué ci-dessous.
$a = [1,2,3];
$b = &$a;
// ↑$Avant un&Mettez
$b[0] = 100;
echo $a[0];
//100 est la sortie
En faisant cela, il devient un type de référence, et \ $ b contient l'adresse mémoire du tableau créé par \ $ a. Puisqu'il est stocké, l'opération est la même que dans le cas de Java ci-dessus.
Recommended Posts