美文网首页
值传递、引用传递、共享传递

值传递、引用传递、共享传递

作者: 风雪围城 | 来源:发表于2017-07-27 01:28 被阅读0次

最近在写代码的过程中,逐渐体会到模块化、对象化、结构化、独立化对于整个项目工程是多么重要和迫切的一件事。
保持逻辑的清晰,保证各个模块灵活可拆卸,提升工程的解耦能力,拒绝臃肿,避免模块内部的强关联,真的很优雅。
结构构成了系统的骨骼,数据在不同对象,不同组件,不同模块之间传递,像血液一样流动起来,这样系统才能活动起来。然而,不同的编程语言之间,对于数据的传递也有这自己的方式,对于开发者而言可能就会造成疑惑。查了一些资料,下面我想总结一下。

值传递


值传递有这样的特点:实际上传递进方法或者对象实例的是要传递内容(基础类型变量或者对象的引用)的副本,因此,在方法或者实例内部改变传递进来的值,对于外部是不可见的,并不会造成什么影响
对于Java来说,从本质上来讲,所有的传递都是值传递

      public static void main(String [] args){
          Dog myDog = new Dog("Rover");      //---1
          foo(myDog);                                       //---2
      }
      public void foo(Dog someDog) {
        someDog.setName("Max");                     //---3
        someDog = new Dog("Fifi");                    //---4
        someDog.setName("Rowlf");                   //---5
      }

说明

myDog变量在内存中占有空间,这段空间中有指向一个Dog实例或者说Dog对象的指针。
在传递过程中,myDog这个内存中的被拷贝然后传递到方法中,并赋值到someDog,此时myDog和someDog这两个内存空间的值都有指向同一个Dog实例,因此此时均可以修改Dog实例的属性。
当给someDog赋值新的Dog对象,改变的只是someDog变量的值,也就是someDog所占内存空间的值,指向了一个新的Dog对象,对myDog并没有任何影响。

引用传递


引用传递的特点是:这里的引用,相当于一个别名,所以,传递到方法或者对象中,对该变量的修改在外部是可见的。就像在某个qq群中,名字叫张三,同一个qq号,现在又进了另外一个qq群,起名李四,然而,不管是张三还是李四,本质上来说,指向的是同一个qq号。
在C++中存在引用传递。不太熟悉C++,这里不细说。

共享传递(Call by sharing)


在JavaScript中看到这个概念。
维基百科上说:

However, the term "call by sharing" is not in common use; the terminology is inconsistent across different sources. For example, in the Java community, they say that Java is call by value.

可见,这跟java中的值传递是同一个概念。

相关文章

  • JavaScript深入之参数按值传递

    除了按值传递、引用传递,还有第三种传递方式 —— 按共享传递(JS应该是共享传递,没有所谓的引用传递) 共享传递是...

  • JS是按值传递还是按引用传递?

    JS是按值传递还是按引用传递? 按值传递 VS. 按引用传递 探究JS值的传递方式 按共享传递 call by s...

  • 值传递、引用传递、共享传递

    最近在写代码的过程中,逐渐体会到模块化、对象化、结构化、独立化对于整个项目工程是多么重要和迫切的一件事。保持逻辑的...

  • 再学JS--函数参数传递类型

    JavaScript的函数参数传递分为按值传递、按引用传递以及按共享传递。 按值传递 什么是按值传递? 把函数外部...

  • 按值传递、按引用传递、按共享传递

    按值传递、按引用传递、按共享传递 按值传递(call by value) 按值传递,就是指在调用函数时,将实参对应...

  • 参数按值传递

    参数如果是基本类型是按值传递,如果是引用类型按共享传递。 1、按值传值 2、共享传值 共享传值: 按引用传递是传...

  • Java中的参数传递

    为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以...

  • Day12-Java

    值传递和引用传递 值传递是值的拷贝, 引用传递是引用的拷贝 String 类型是引用类型, new String ...

  • Java所有参数-对象引用及基本类型值--都是值传递

    前言 当前主要存在两种传递方式,值传递和引用传递,先简单介绍值传递和引用传递值传递(pass by value)是...

  • Go语言学习笔记(三)

    指针 Go的指针不能运算 参数传递 Go的参数传递是值传递(值传递:开辟新的空间,拷贝传递参数的值,引用传递:引用...

网友评论

      本文标题:值传递、引用传递、共享传递

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