值传递

值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。这种复制一份进行传递的方式叫值传递。

引用传递

引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。所以只有你传的是实际地址,才会修改实际地址!你只要是复制的入参值或者地址,复制的那份在内存中的地址永远不是原地址!SO!

哦!又是一个小小的细节!通过复制的传值方式叫值传递,通过地址直接传递的方式叫做引用传递,那么严格来讲,不论是JAVA还是GO都是对参数进行复制后进行的传递,即JAVA和GO中只有值传递,因为传递的是复制的值或者复制的引用!不存在不复制直接进行地址传递的事情!

一些人的误解,说明!
引用传递中并不存在复制这个过程!所以如果你讲过下面这几句话,那肯定都是错误的:
1.值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。(明显不对,复制没复制压根没提!)
2. Java是引用传递(啊,这!JAVA参数传递的是复制的副本,有复制这个过程是值传递!)
3. 传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。(还是没提复制Copy这回事!)

本文不讨论求值策略,但还是有人想知道!那就放上来!(仅严格求值)

传值调用(值传递)
先对参数进行求值,然后Copy一份值,将copy的这一份值给方法或者函数的入参!所以说值是可以直接赋值的!【狗头】

传引用调用(引用传递)
传一个引用,那就直接引用就完事!通过引用修改值,值会被改变,这个大家没有意见吧!

传共享对象调用(共享对象传递)
传共享对象,先获取到实际传入参数的地址,然后将其复制一份给形参,引用的引用,或者指针的指针,指向的最终还是实际的值!你引用几次都一样!(我猜的【欢迎指正】),所以你要改具体引用地址的值还是可以改!

代码例子:讲实话哦,敲代码真不错!【强行解释】

//GO语言
package mainimport "fmt"func main() {//str :=   "123,我们"//var stra,strsub = subString(str,0,3)//fmt.Println("str的地址:",stra,",str的截取内容:",strsub)//调用有返回值的GetA方法,传入a,GO会自动将a的值Copy一份,将copy后的那一份值改变后在GetA方法中传给返回值resultA,所以resultA输出为2//参数传递方式和你传什么参数类型没有关系,没有关系,没有关系!a := 1var resultA =    GetA(a)fmt.Println("resultA的值为:",resultA)//调用无返回值GetB的方法,传入b,GO会自动将b的值Copy一份,将copy后的那一份值改变,这个方法没有返回,所以打印的b的输出没有变化!//参数传递方式和你传什么参数类型没有关系,没有关系,没有关系!b:=1GetB(b)fmt.Println("b的值为:",b)
}//截取字符串
func subString (str string,start int,end int) (*string,string) {var s = &str;fmt.Println("需要截取的字符串值:",str)fmt.Println("需要截取的字符串地址:",&str)var subStr = str[start:end]return s,subStr
}//有返回值的,可以改变传入的值并将其返回
func GetA (b int) int {b++return b
}//没有返回值,不可以改变传入的值,因为没有任何返回值
func GetB (b int)  {b++
}
//JAVA语言
public static void main(String [] args){
int a = 1;
int b = getA(a);
System.out.println(b);
}public int getA (int b){b++;return b;
}
此处编译为字节码后此处参数b为1, 直接用1的副本进行计算,为值传递//截取字符串的方法
public static void main(String [] args){
String  sss =  "123,我们";
String resultS = subString(sss);
System.out.println(resultS );
}public String subString (String  str){
String strSub = str.subString(0,3);return strSub;
}
//strSub输出: 123小提示:
有兴趣的可以先对JAVA字节码结构进行研究:
JAVA字节码结构组成官方链接:
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html总有人说自己English不太行,那就建个生词本,边看官网边记忆生词!因为有点慢,所以缓存一部分生词,直接翻译插件翻译!【狗头】,我English也一般,所以为了看文档,我就在看文档的时候记单词!记忆宫殿不会骗人!可能,也许,大概?涉及计算机底层虚拟地址和物理地址转换的内容可以看看其他大佬们的文章:
https://zhuanlan.zhihu.com/p/342465996

值传递和引用传递是什么?相关推荐

  1. Java中的值传递和引用传递

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?      答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为 ...

  2. Java值传递与引用传递

    Java面试题: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答案基本上是:值传递 说明:得出这种结论的前提必须是&qu ...

  3. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  4. Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?

    来自:沉默王二 在逛 Stack Overflow 的时候,发现了一些访问量像阿尔卑斯山一样高的问题,比如说这个:Java 到底是值传递还是引用传递?访问量足足有 188万+,这不得了啊!说明有很多很 ...

  5. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  6. Java中传参数--值传递和引用传递

    ** Java中传参数–值传递和引用传递 ** 在Java中,传参数分为值传递和引用传递. 在Java中的数据类型分为两大类:一类是引用类型,也叫类类型(除了String以外的所有复合数据类型,包括数 ...

  7. JavaScript强化教程——对象的值传递和引用传递

    2019独角兽企业重金招聘Python工程师标准>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 func ...

  8. list修改元素的值_Python 到底是值传递还是引用传递

    我们平时写的 Python 程序中充斥着大量的函数,包括系统自带函数和自定义函数,当我们调用函数时直接将参数传递进去然后坐等接收返回值即可,简直不要太好用.那么你知道函数的参数是怎么传递的么,是值传递 ...

  9. php值传递和java_Java的值传递和引用传递

    形参与实参 我们先来重温一组语法: 形参:方法被调用时需要传递进来的参数,如:func(int a)中的a,它只有在func被调用期间a才有意义,也就是会被分配内存空间,在方法func执行完成后,a就 ...

  10. Python中值传递和引用传递区别

    原文:http://blog.csdn.net/xuqiaobo/article/details/72236539 举例,函数参数如果是dic,都不需要返回值,原值就被改变了 def aa(dic): ...

最新文章

  1. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java
  2. 2021 EdgeX 中国挑战赛决赛入围名单公布
  3. java-List集合的源码分析(数据结构方面,源码注释方面),迭代器快速失败机制
  4. JavaFX拖放事件
  5. 烟台大学计算机与控制工程学院研究生导师,烟台大学计算机与控制工程学院欢迎大家...
  6. easyui datagrid 遇到的坑 cannot read property ·· pageNum bug and so on
  7. 程序员 数学_程序员数学课程
  8. 有哪些好用的在线条形码生成器?
  9. 离散域下的泊松方程求解(python实现)
  10. 工单管理软件,免费工单管理系统
  11. [译] QUIC Wire Layout Specification - Introduction Overview | QUIC协议标准中文翻译(1) 简介和概述...
  12. batch软件功能测试,Batch SMART 最强序列特征[结构域]预测软件
  13. 算法图解第一章算法简介之二分查找C++代码实现
  14. 【独家】谁是钉钉最大的反对派?
  15. 局域网聊天工具都有哪些?
  16. Windows 仍在设置此设备的类配置。 (代码 56)
  17. java实例化对象是什么意思
  18. 紫光同创软件synplify.srr failed
  19. PLC的具体应用领域主要有哪些
  20. 手把手教你实现一个抽奖系统!

热门文章

  1. html在线编辑器代码运行,JSRun - 在线JS、HTML编辑器(同时也支持各种后台代码的编辑运行)...
  2. 入行多年软件测试总结的经验
  3. 第三方软件测试 CNAS软件测试报告
  4. 程序员,这12个问题让经理比你痛苦多了
  5. 云主机装黑果实践(4):阿里轻量机上变色龙bootloader启动问题
  6. 九鼎Study210嵌入式开发板刷机笔记
  7. Unity(协程是什么,怎么用)
  8. Cocos2d-x游戏暂停、继续游戏、重新开始界面的实现---之游戏开发《赵云要格斗》(10)
  9. MATLAB绘制堆叠形柱状图
  10. 设计模式之接口隔离原则