代码如下:
public void test(BSTNode<T> z)
{
BSTNode<T> y;
if (z.left != null){
y = z.parent;
BSTNode<T> a;
a = y.left;
if (y != null){
System.out.println("before a "+a);
System.out.println("before y.left "+y.left);
System.out.println("befere z.parent.left "+z.parent.left);
y.left = null;
//a = null;
System.out.println("after a "+a);
System.out.println("after y.left "+y.left);
System.out.println("after z.parent.left "+z.parent.left);
}
}
}
打印结果如下:
before a threadSleep.BSTree$BSTNode@15db9742
before y.left threadSleep.BSTree$BSTNode@15db9742
befere z.parent.left threadSleep.BSTree$BSTNode@15db9742
after a threadSleep.BSTree$BSTNode@15db9742
after y.left null
after z.parent.left null
请问 “after a ”为什么不是null?
或者将代码:
y.left = null;
//a = null;
改为
//y.left = null;
a = null;
结果为:
before a threadSleep.BSTree$BSTNode@15db9742
before y.left threadSleep.BSTree$BSTNode@15db9742
befere z.parent.left threadSleep.BSTree$BSTNode@15db9742
after a threadSleep.BSTree$BSTNode@15db9742
after y.left null
after z.parent.left null
运行环境:
jdk1.8
Vos résultats seront certainement deux fois différents. En fait, c'est le même que celui ci-dessous.
Ce qu'on appelle passer par référence en Java consiste essentiellement à transmettre l'adresse de l'objet. L'adresse est en fait passée par valeur. Grâce à cette adresse, la valeur de l'objet pointé dans la mémoire peut être modifiée. Changer la valeur de cette adresse n'a aucun sens sauf perdre le contrôle de l'objet réel.
Je viendrai, je viendrai
C'est très simple. Il suffit de comprendre que le passage par référence transfère une adresse. Une fois cette adresse passée, elle sera placée dans la variable locale de la méthode appelée. Il y a deux cadres de pile pour les deux méthodes, et chaque cadre de pile Ils ont leurs propres tables de variables locales et ne s'influencent pas les uns les autres. C'est pourquoi vous passez une référence puis changez le point de référence pour n'avoir aucune image de celui d'origine.
Alors, pourquoi la valeur de val change-t-elle lorsque obj.val est modifié ? Parce que la valeur de val est stockée dans le tas, elle est copiée, modifiée, puis réécrite dans le tas, donc elle change. Si vous ne comprenez pas, vous pouvez continuer à poser des questions