java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
是时候展现一下我的JAVA基础知识了,2333。
我按照执行顺序给你写注释好了。
Person p1 = new Person(10);
//创建了一个对象
//p1.age=10;
modify(p1);
//modify函数传参,创建了一个在modify函数里面的局部变量p
//你应该明白p是一个新的变量,这里类似于执行了p=p1,这两个是指向的同一个对象的
//p.age=10;
p = new Person(20);
//注意,这里!这里!
//这里是p被重新赋值了,p指向了新的对象new Person(20);
//p.age=20;
//和p1指向的那个对象一毛线关系都没有啊
所以,你的代码是在函数内部,把局部变量给重新赋值了。
是没法修改到外面的对象的,因为你已经把唯一能访问到外面那个p1的p给重新赋值了!
public static void modify(Person p){
p.age=20; //只有这样才能修改对象!
}
同理,如果你写成这样:
public static void modify(Person p){
p = null;//对外面的p1没有任何影响
}
我举个例子,你就比较好理解了。
你创建了一个100000000个元素的数组,比如就叫p1,你把数组通过参数传进函数里面,那么:
这个参数p(类似于p = p1),p和p1他们是指向同一个对象。
不是说modify(int[] p)重新创建了100000000个元素的数组。
这个应该很好理解。
那么:
然后你通过p的内置函数怎么操作p都行,都是操作的那100000000个元素的数组。
但是,你不能把p重新赋值啊。
重新赋值它就不是之前那个数组啦!
比如:
你重新p = new int[100000000],就创建了一个新的100000000个元素的数组啊。
你执行p = null,也只是销毁了这个引用,不让它指向100000000个元素的数组而已。
对外面p1的那个数组不会再有任何影响了。
看到答案里好多人对这个有误解额。。。
说不是一个对象的。
说不能在函数里改变参数指向的对象的。
说int是传值的。
说什么的都有,2333。
补充:
关于JAVA的函数传参数,你应该也听说过,所谓"基本数据类型是传递的值,其它都是传递的引用"。
个人理解是这样的。
你传递个Person的对象进去,你可以用SetAge()什么的修改这个对象。
但是基本的数据类型,比如Integer、String等等,他们没有什么内置函数能改变他们自己。
所以,你传递进去一个int的参数,就算其实是传递的引用,你也只能对int做重新赋值,一重新赋值,就表现成传递的是"值"(永远影响不到函数外面)。
java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...相关推荐
- JAVA引用传递导致的方法中重新赋值失败
在工作中遇到需要对某些参数进行业务逻辑过滤处理,在原方法中过滤成功.将业务过滤代码抽成公共方法后,过滤失败.当时情况如下: 原代码: public static void main(String[] ...
- java 传入参数_java参数怎么传递参数
计算机语言给子程序传递参数的方法有两种: 按值传递(call-by-value):这种方法将一个参数值复制成子程序的正式参数.这样,对子程序的参数的改变不影响调用它的参数. 引用调用(call-by- ...
- java 内存分布_java的各类型数据在内存中分配情况详解_
1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Jav ...
- java menuitem 图标_java – 如何以编程方式更改ActionBar中的MenuItem图标
如何以编程方式更改ActionBar中的MenuItem图标?我试着用 MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings) ...
- 值传递 引用传递(传地址,传引用)的区别
传值 是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么 ...
- c语言函数变量地址符,C语言中取地址符做函数形参?—— 引用的讨论
取地址符&做函数形参? C语言强大且危险 引入 这个问题花去了整整一天的研究. 先看一段严蔚敏的<数据结构>中栈的例程: 这里面的&S第一遍看的时候想当然的认为是取了SqS ...
- JavaScript函数中的arguments(js函数中的arguments,函数默认参数arguments)
简述:js中的函数大家都比较熟悉,今天来分享下函数中的默认参数arguments.js的函数参数和其他的语言有些不同,它并不介意你传进来多少个参数,以及参数的数据类型,即使你在定义函数时,只设置了两个 ...
- 凡是函数中未指定存储类型_函数中未指定存储类别的局部变量,其隐含的存储类别为()...
展开全部 函数中未指定存储类别的局部变量,其隐含的存储类别为自动存32313133353236313431303231363533e59b9ee7ad9431333431353338储类别. 函数中的 ...
- MATLAB中的varargin,varargout在函数中运用
varargin,表示用在一个函数中,输入参数不确定的情况,这增强了程序的灵活性. 例如:function g=fun(f,varargin) ...
- python中一个函数调用另一个函数中的变量
我们在一个函数func2()中想使用另一个函数func1()中的变量,通常会使用返回值的方法,但是在调用的时候,也会将func2()整体运行一遍: 如果func2()函数体的运行对于func1()取返 ...
最新文章
- 热点账户问题和常用解决方案【上】
- 每日Linux命令(1)-date
- javascript学习系列(10):数组中的slice方法
- 剑指Offer - 面试题64. 求1+2+…+n(递归)
- 微信小程序学习目录推荐
- (转)令人无法理解的死锁案例分析
- Mac 10.12使用free命令(fish)
- 云计算在我们日常生活中有很多应用,主要有哪些?
- awvs 与 xray联动
- 托马斯微积分10版积分简表101 公式修正
- Iometer存储测试工具参数说明-4test setup
- java 分布式任务_分布式定时任务(一)
- SQL语句中查询数据
- 【9129】“移动媒体产品”的三个方向
- 股票交易sdk接口是什么意思?
- 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(二)
- 互联网让中国零售业弯道超车:近创新比黑科技重要
- Android 画布Canvas之控件连线操作
- npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! wlwl-dsfvue@1.0.0 dev: `node build/dev-server.js`报错
- 计算机仿真题液相色谱,毛细管电泳分离过程计算机仿真研究.pdf
热门文章
- javaSE----继承
- 输出100以内所有的质数
- 客户端连接不上kafka的解决方案
- php页面上必须有表单,php – 在同一页面上显示提交的表单响应. (没有重装)
- apimodel 可以重复吗_Web API是否需要有ViewModels层类?
- vue之组件之间的传值
- display: flex的兼容性写法
- 疯狂的双十一也难挡股价的下跌,电商平台难道真的进入了瓶颈期?
- Linux下eclipse编译C/C++程序遇到 undefined reference to `pthread_create'的异常解决办法
- 解决思维导图软件Mindmanager Mindjet连接出错