当前位置: 首页 > news >正文

苏州市住房和城乡建设局网站地震局google网站搜索

苏州市住房和城乡建设局网站地震局,google网站搜索,竞价排名推广方案,网站推广如何做面试题:简述什么是值传递和引用传递? 什么是值传递? 值传递(pass by value)是指在调用函数时,把实际参数的值复制一份传递给函数。换句话说,函数内部对参数的任何修改,都不会影响到…

面试题:简述什么是值传递和引用传递?

什么是值传递?

值传递(pass by value)是指在调用函数时,把实际参数的值复制一份传递给函数。换句话说,函数内部对参数的任何修改,都不会影响到原始的实际参数。这是因为传递的是“副本”,跟原值没直接联系。

举个例子:

func GetA(b int) int {b++  // 改的是 b 的副本return b
}func main() {a := 1resultA := GetA(a)  // a 的值被复制到 bfmt.Println(resultA)  // 输出 2fmt.Println(a)        // a 还是 1
}

在这个例子中,a的值被复制了一份传给函数GetA,所以函数内部的修改不会影响到外面的a


什么是引用传递?

引用传递(pass by reference)是指直接将实际参数的“地址”传递给函数。函数内的参数变动,会直接影响到实际参数的值,因为函数操作的是原始的“引用”而不是副本。

然而!许多编程语言(比如 Java 和 Go)其实并不是严格意义上的引用传递。它们传递的依然是“值”,只不过这个“值”可能是对象的引用(也就是内存地址的副本)。这点是很多人容易误解的地方。


常见误解,别踩坑!

  1. “值传递是传值,引用传递是传引用。”
    误!问题的关键不在传的是什么,而在于“传递的值有没有被复制”。

  2. “Java 是引用传递。”
    错!Java 传的是引用的副本,是“值传递”。复制了引用,实际参数地址不会被直接修改。

  3. “传递基本类型是值传递,传递对象是引用传递。”
    依然错!语言本质还是值传递,传对象时是引用的值被复制,而不是直接传递引用。


再补充点知识:特殊的“传共享对象调用”

传共享对象有点像引用传递的“拐弯版”。实际参数的地址被复制一份传给函数,操作的是复制后的地址,最后依然指向原始的值。你要改这个值完全没问题,但如果试图改引用本身的指向,就没用。


求值策略的简单解释

求值策略决定了参数在函数调用时是怎么被处理的。这里补充一下最常见的几种:

  1. 传值调用(值传递):
    直接复制参数的值,函数内部改动对实际参数无影响。

  2. 传引用调用(引用传递):
    传的是参数的引用,函数内改动会直接反映到原始参数上。

  3. 传共享对象调用(共享对象传递):
    传递对象的引用副本,操作引用指向的值有效,改引用本身无效。


编程语言中的值传递 VS 引用传递

Go 语言的例子

package mainimport "fmt"func GetB(b int) {b++  // 改的是 b 的副本
}func main() {b := 1GetB(b)fmt.Println(b)  // b 还是 1,因为改的是副本
}

还有字符串的例子:

func subString(str string, start int, end int) (*string, string) {var s = &strsubStr := str[start:end]return s, subStr
}func main() {str := "123,我们"_, result := subString(str, 0, 3)fmt.Println(result)  // 输出 "123"
}

Go 永远是值传递,哪怕传递的是引用,还是复制了引用的副本。


Java 的例子

public class Main {public static void main(String[] args) {int a = 1;int b = getA(a);System.out.println(b); // 输出 2System.out.println(a); // a 还是 1}public static int getA(int b) {b++; // 改的是 b 的副本return b;}
}

字符串的例子:

public class Main {public static void main(String[] args) {String s = "123,我们";String result = subString(s);System.out.println(result); // 输出 "123"}public static String subString(String str) {return str.substring(0, 3); // 截取字符串,返回一个新字符串}
}

Java 的参数传递本质也是值传递,传递对象时传的是“引用的副本”。


小总结

  • 值传递:传递的是参数的值,函数内修改对实际参数无影响。
  • 引用传递:传递的是参数的引用,函数内修改直接影响实际参数。
  • **Java 和 Go 的参数传递:**都是值传递。传递的可能是值的副本,也可能是引用的副本,但一定是“复制”过的东西。

记住这个逻辑,搞清“传的内容有没有被复制”,以后面试再也不慌啦!

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的
7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!

http://www.yayakq.cn/news/347357/

相关文章:

  • 短视频网站怎么建设天津快推科技有限公司
  • 上海虹口网站建设做网站卖资料
  • 淄博网站建设网站推广优化营销网站开发找哪家
  • 网站常用的中文字体全国信息企业公示网官网查询
  • 二级学院网站建设方案建设网站的目的
  • 给设计网站做图会字体侵权吗福州建设网站效果
  • 品牌建设和渠道建设哪个更重要seo公司推荐
  • 网站运维公司互联网公司运营是做什么的
  • 建设网站怎么赚钱做视频网站需要什么
  • 网站建设自查工作网站设计有哪些语言版本
  • 深圳一百讯网站建设对外网站建设情况汇报
  • 网站建设后运维合同wordpress图片防盗链插件
  • 做好政务公开和网站建设贵州网站设计公司
  • 简述网站建设的中山专业找人公司
  • 智能网站建设公司如何编写微信小程序代码
  • 石家庄移动端网站建设网站建设兆金手指下拉
  • 整站优化全网营销图案设计
  • 去年做啥网站能致富wordpress发布站点
  • 怎么做网站免费江苏省建设注册中心网站首页
  • 投资理财培训网站建设个人网页设计作品简约
  • dw做网站链接数据库重庆厂区招工招聘信息查询
  • 网站的元素有哪些传统网站布局
  • 企业网站设计的主要目的wordpress如何使用cdn
  • 做网上招聘哪个网站好怎么看一个网站好坏
  • 景区旅游网站平台建设方案如何注册百度账号
  • 网站建设 排名小程序源码免费下载
  • 建站服务搭建的页面时钢筋网片价格多少钱一吨
  • 网站托管费用 优帮云专门做民宿的网站有哪些
  • 平湖市建设局网站网站专业制作公司
  • 绵阳做手机网站建设设计专业哪个学校好