参数为基本类型(int/char/…)

public static void main(String[] args){
     int a=0;
     hs(a);
     System.out.println(a);
}

public void hs(int a){
     a=77;
}

运行的结果为a=0,也就是调用外部函数没有效果。

个人的理解是:如果是基本类型的话,hs函数里,只是用了一下数值,对主函数里的变量a没有任何影响。

ps:基本类型是值传递,引用类型是地址传递。(修正:Java里只有值传递的概念)

参数为引用类型(List/自定义类/…)

主函数内变量改成:List list=new ArrayList<>(); 或者自定义树的结点: TreeNode t=new TreeNode();
被调用的函数对其进行 list.add()操作,或者t.val=5的操作,运行结果是:生效了

个人理解是:传递的是对象的指针,对该地址上的数据直接进行修改,所以会永久生效。

参数为引用类型(Integer/String/…)

主函数内变量改成:Integer i=0;
被调用的函数对其进行 i=7;的操作。运行结果是?不生效。

个人理解:这也是我迷惑了一晚上的问题。同为引用类型,为什么Integer修改后就不生效呢?实际上,i=7,并不是把原来地址上的数去抹除再改成新的数据。实质上是i=new Integer(7),也就是重新开辟了空间,把指针i重新指向新的空间地址。String比较特殊,String类是被final修饰的,所以是不可被继承的,本质上不允许修改。str="xxx"实质上是编译期间JVM去常量池里找,找到了直接引用,找不到就在常量池开辟空间。运行期间在栈创建指针指向常量池。所以被调用函数中把String类型参数修改为其他内容的话,是在常量池中新开辟了空间并把栈中指针指向了新的空间。
这样的话,原来地址的内容并没有改变,所以主函数里输出i,内容也不会改变了。

ps:Integer i=7 和 Integer i=new Integer(7) 效果基本上一样,都是开辟空间并指向i罢了,略微的区别是如果之前已经定义了i=7,前者会直接把i指向该空间地址,后者则不管三七二十一直接开辟新空间。

这是本人心血来潮写的第一篇博客,各位看官将就着看呗,欢迎评论批评指正,不过我估计好久才会看到消息。。。

主函数中调用返回值为void的函数,函数的参数传递规律相关推荐

  1. python一个函数调用另一个函数的返回值_在另一个函数中使用返回值

    所以我认为当你调用check_channel_number函数时,user_channel_number是在那里定义的,所以当你调用delete_events函数时,它已经超出了范围,也许这样会有帮助 ...

  2. sqlserver中编写自定义函数中的返回值问题

    写了一个获取符号间隔字符串的函数,原先代码如下 CREATE FUNCTION funGetSubStr (  -- Add the parameters for the function here ...

  3. python write函数参数_Python函数-函数参数、返回值

    函数 1.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫         做subroutine(子过 ...

  4. C++中函数模板的返回值是模板类型参数的调用方法

    1 函数模板 模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号扩住的一个或多个模板形参的列表,形参之间以逗号分隔.关于函数模板的详细介绍,请参考<C++中模板函数及模板 ...

  5. void函数返回值_(*void(*)()0)() 是什么

    (*void(*)()0)() 代码分析 这是啥 这行代码,是我今天在看<C陷阱与缺陷>时看到的,一开始很不能理解.慢慢上网摸索一些后,大致理解了,现在来分享一下我所理解的这行代码. 1. ...

  6. Java中带返回值的方法的定义与调用

    带返回值的方法定义: public static 数据类型 方法名(参数){return 数据;} 与前文中带返回值的方法定义不同的是,void变成了数据类型,对应return后紧跟的数据.这里顺便说 ...

  7. C语言入门---函数类型与返回值(int和void)

    int和void的区别? 哈喽,各位小伙伴们,在我们学习C语言的过程中经常会看到书中的main函数前带有int和void,就像下面这样: 上面这两种有什么区别呢?在C语言中,可以把函数分为有返回值函数 ...

  8. python中return返回值为函数名_Python函数返回值

    Python函数返回值教程 同时,Python 函数的返回值不需要在函数的签名上体现,只需要在函数体里面直接使用 return 语句返回即可. Python函数不返回值详解 语法 def func_n ...

  9. linux在主函数中调用进程,linux 调用进程

    大家好! 请教一个问题:有两个进程(A&B),进程A中通过excel()函数调用进程B.请问进程A如何获取进程B的返回结果? 谢谢! | There is no return from a s ...

最新文章

  1. Nmap安装和扫描(二:Nmap基本操作)
  2. 让word不显示计算机名作者,如何使word在其他电脑上也不显示回车符
  3. python123登录网页版_Python模拟登录验证码(代码简单)
  4. css列表格式属性,css list-style-type属性笔记
  5. 小鱼易连电脑版_电脑?不,它是随时就绪的专业电话会议解决方案
  6. 你知道面试官是如何刷人的吗
  7. Vue.js生命周期
  8. 数据库 统计数据收集 有什么作用_《原神》荒山孤剑录2/5收集汇总 荒山孤剑录作用是什么...
  9. 【Node】—系统模块
  10. Sql Server 2000 无法打开用户默认数据库。登录失败
  11. 从技术解析到实战演练,三步get文本信息抽取
  12. 十年后相遇,才解开了当初的误会
  13. 电脑可以使用QQ,但是无法上网的解决方案
  14. Flask框架学习:蓝图的使用
  15. php提取bing背景,使用PHP获取必应Bing每日图片
  16. HihoCoder - 1370 快乐数字
  17. Emily Morehouse的Python社区访谈
  18. Linux安装wine以及运行Windows程序
  19. 2018中国大学生程序设计竞赛 - 网络选拔赛
  20. Linux系统中彻底隐藏你的进程(隐藏后如何恢复显示?)

热门文章

  1. 电脑网络怎么添加计算机,局域网添加打印机,教您局域网打印机怎么添加
  2. Google浏览器设置跳转到新的页面
  3. mysql如何drop数据库_MySQL如何删除数据库
  4. uniapp-本地图片分享-截图分享-解决打包之后图片分享为空
  5. Flink 集群启动流程
  6. GitLab CI/CD工作原理及使用
  7. 基于JavaEE的驾校在线考试管理系统_JSP网站设计_SqlServer数据库设计
  8. 中财网爬取上市公司第一大股东持股比例
  9. Python中__name__的理解
  10. Java8 的 Comparator 用法