Rumah  >  Soal Jawab  >  teks badan

java编程,函数内变量传递问题,为什么没有都改变呢?

代码如下:

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

阿神阿神2743 hari yang lalu579

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理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 ?

    balas
    0
  • 怪我咯

    怪我咯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.

    balas
    0
  • ringa_lee

    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

    balas
    0
  • Batalbalas