Rumah > Soal Jawab > teks badan
代码如下:
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
大家讲道理2017-04-18 10:53:11
Hasil anda pasti berbeza dua kali. Malah ianya sama seperti di bawah.
int x = 10;
int y = x;
y = 0;
x ?
怪我咯2017-04-18 10:53:11
Apa yang dipanggil lulus melalui rujukan dalam Java pada asasnya menghantar alamat objek Alamat sebenarnya melalui alamat ini, nilai objek yang ditunjukkan dalam memori boleh diubah suai. Menukar nilai alamat ini tidak masuk akal kecuali kehilangan kawalan objek sebenar.
ringa_lee2017-04-18 10:53:11
Saya akan datang, saya akan datang
Ini sangat mudah Anda hanya perlu memahami bahawa melalui rujukan memindahkan alamat Selepas alamat ini diluluskan, ia akan diletakkan dalam pembolehubah tempatan kaedah yang dipanggil. Terdapat dua bingkai tindanan untuk dua kaedah setiap bingkai tindanan Mereka mempunyai jadual pembolehubah tempatan mereka sendiri dan tidak menjejaskan satu sama lain. Jadi inilah sebabnya anda lulus rujukan dan kemudian menukar titik rujukan untuk tidak mempunyai imej asal.
Jadi, mengapa nilai val berubah apabila obj.val diubah kerana nilai val disimpan dalam timbunan, diubah suai, dan kemudian ditulis semula ke timbunan, jadi ia berubah. Jika anda tidak faham, anda boleh terus bertanya