博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
讨论java中调用函数,形参的传递是值传递还是引用传递的问题
阅读量:6773 次
发布时间:2019-06-26

本文共 1241 字,大约阅读时间需要 4 分钟。

首先说结论:

当参数是引用数据类型时,传入形参的是实参的引用;(证一)

当参数是基本数据类型时,传入形参的是实参值;(证二)

证明如下:

(证一)

public class PassByReferenceOrValueTest {	public static void main(String[] args) {		Person p = new Person();		p.setName("main");		System.out.println("main中hash值:"+p);		System.out.println("被function调用前的name:"+p.getName());		function1(p);		System.out.println("被function调用后的name:"+p.getName());	}		public static void function1(Person person) {		System.out.println("function中的hash值:"+person);		person.setName("function");	}}

 运行结果为:

main中hash值:passByReferenceOrValueTest.Person@7852e922

被function调用前的name:main
function中的hash值:passByReferenceOrValueTest.Person@7852e922
被function调用后的name:function

 

分析:

在函数中使用的setName方法,将参数的name更改为function之后,实参的name也被改为了function,说明形参的改变会影响到实参,这可以说明传入的是对象的地址值(至少效果上跟引用传递是一样的)

 

========================================分割线===========================================================

证二:

public class PassByReferenceOrValueTest2 {    public static void main(String[] args) {        int i = 1;        function1(i);        System.out.println(i);    }        public static void function1(int i) {        i=8;    }}

运行结果为:

1

 

分析:

虽然调用函数时将形参的值设置成8,但是主函数中的i还是1,说明传入的参数无论怎么改变,也不会影响到之前的变量i,这跟值传递是一样的效果。

转载于:https://www.cnblogs.com/lixin4395/p/10226411.html

你可能感兴趣的文章
Java中的静态内部类
查看>>
linux系列之使用chrony代替ntp同步时间
查看>>
linux中的快捷键
查看>>
Wordpress与Discuz
查看>>
决策树--信息增益,信息增益比,Geni指数的理解
查看>>
AIX7操作系统版本升级
查看>>
Django 之 ORM单表增删改查操作
查看>>
SOCKET知识
查看>>
操作权限组件 Example 程序
查看>>
关于微信跳一跳使用报错的详细解决方法
查看>>
Linux中查看命令帮助大全
查看>>
JEECG-Swagger UI的使用说明
查看>>
2011年写的蹩脚的shell脚本
查看>>
进程优先级
查看>>
spark笔记之RDD的缓存
查看>>
压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具、tar打包工具、打包并压缩...
查看>>
Java调用.Net WebService 发生异常:服务器未能识别 HTTP 头 SOAPA...
查看>>
浅谈消息队列的原理
查看>>
MySQL对查询结果排序
查看>>
Cookie
查看>>