美文网首页
你可能一直都没弄懂的Java知识点

你可能一直都没弄懂的Java知识点

作者: 展翅高飞鹏程万里 | 来源:发表于2020-10-28 22:44 被阅读0次
    class Test{
      public  void main(){
        User nb = new User("AA");
        change(nb);
        System.out.println(nb.name);
      }
      void change(User user){
        //操作一
        user.setxxx("BB");
        //操作二
        user = new User("CC");
      }
    }
    

    回答‘BB’的小伙伴恭喜你答对了,其他打错的小伙伴也不要灰心,听我讲完你就懂为什么了。
    答对的小伙伴能否回答我两个问题:

    • 方法调用过程中,实际参数是如何赋值到形式参数的?
    • 操作二中直接改变形参指向的地址,为什么实参没有影响?

    如果能正确回答上面两个问题的小伙伴请直接划走,如果不知道怎么回答的小伙伴那么恭喜你,你要继续听我BB了。

    • 第一我们要搞懂:实际参数与形式参数的传递过程发生了什么?

    所有的语言都逃不过三种传递过程:

    • 值传递:就是我直接将实参复制一份,然后丢给你形参使用。这个时候如果我直接修改形参执行的对象的值或者重新对形参赋值,都对实参没有任何影响。因为“实”和“形”不在同一个空间,不在同一个维度。你影响不了我,我影响不了
    • 引用传递:就是我直接将实参赋值给你形参,不进行复制。你看我对你多好,形参,你想怎么修改对象都行,尽管修理他。这个时候如果我直接修改形参指向对象的值或者重新对形参赋值,都对实参产生影响。类似于:甲方爸爸给你一个紧急任务,到你手上之后,做的惨不忍睹。甲方爸爸看后直接把你炒鱿鱼。
    • 共享对象传递:重点来了,小伙伴们。为了削弱引用传递的权力,专门设计这个一个东西。削弱什么能力呢?1.形参可以直接操作指向的对象(操作一) 2.形参可被重新赋值(操作二)。能看出形参在引用传递的时候拥有两种权力,那么共享对象传递其实削弱了第二种权力。也就是当形参被重新赋值时,不会对实际参数有任何的影响。类似于:我把儿子交给你剪头发,你想怎么剪都行。但是你不能把你的发型给我看,就当我儿子剪了一个帅气的头发。

    好啦本编文章吹波结束,还有不懂的小伙伴可以参考下方的链接
    javaer

    相关文章

      网友评论

          本文标题:你可能一直都没弄懂的Java知识点

          本文链接:https://www.haomeiwen.com/subject/pchhvktx.html