是时候展现一下我的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中引用传递问题,在函数中修改引用的指向,会不会影响实参?...相关推荐

  1. JAVA引用传递导致的方法中重新赋值失败

    在工作中遇到需要对某些参数进行业务逻辑过滤处理,在原方法中过滤成功.将业务过滤代码抽成公共方法后,过滤失败.当时情况如下: 原代码: public static void main(String[] ...

  2. java 传入参数_java参数怎么传递参数

    计算机语言给子程序传递参数的方法有两种: 按值传递(call-by-value):这种方法将一个参数值复制成子程序的正式参数.这样,对子程序的参数的改变不影响调用它的参数. 引用调用(call-by- ...

  3. java 内存分布_java的各类型数据在内存中分配情况详解_

    1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Jav ...

  4. java menuitem 图标_java – 如何以编程方式更改ActionBar中的MenuItem图标

    如何以编程方式更改ActionBar中的MenuItem图标?我试着用 MenuItem menuItem = (MenuItem)findViewById(R.id.action_settings) ...

  5. 值传递 引用传递(传地址,传引用)的区别

    传值      是把实参的值赋值给行参      那么对行参的修改,不会影响实参的值           传地址      是传值的一种特殊方式,只是他传递的是地址,不是普通的如int      那么 ...

  6. c语言函数变量地址符,C语言中取地址符做函数形参?—— 引用的讨论

    取地址符&做函数形参? C语言强大且危险 引入 这个问题花去了整整一天的研究. 先看一段严蔚敏的<数据结构>中栈的例程: 这里面的&S第一遍看的时候想当然的认为是取了SqS ...

  7. JavaScript函数中的arguments(js函数中的arguments,函数默认参数arguments)

    简述:js中的函数大家都比较熟悉,今天来分享下函数中的默认参数arguments.js的函数参数和其他的语言有些不同,它并不介意你传进来多少个参数,以及参数的数据类型,即使你在定义函数时,只设置了两个 ...

  8. 凡是函数中未指定存储类型_函数中未指定存储类别的局部变量,其隐含的存储类别为()...

    展开全部 函数中未指定存储类别的局部变量,其隐含的存储类别为自动存32313133353236313431303231363533e59b9ee7ad9431333431353338储类别. 函数中的 ...

  9. MATLAB中的varargin,varargout在函数中运用

    varargin,表示用在一个函数中,输入参数不确定的情况,这增强了程序的灵活性.               例如:function g=fun(f,varargin)               ...

  10. python中一个函数调用另一个函数中的变量

    我们在一个函数func2()中想使用另一个函数func1()中的变量,通常会使用返回值的方法,但是在调用的时候,也会将func2()整体运行一遍: 如果func2()函数体的运行对于func1()取返 ...

最新文章

  1. 热点账户问题和常用解决方案【上】
  2. 每日Linux命令(1)-date
  3. javascript学习系列(10):数组中的slice方法
  4. 剑指Offer - 面试题64. 求1+2+…+n(递归)
  5. 微信小程序学习目录推荐
  6. (转)令人无法理解的死锁案例分析
  7. Mac 10.12使用free命令(fish)
  8. 云计算在我们日常生活中有很多应用,主要有哪些?
  9. awvs 与 xray联动
  10. 托马斯微积分10版积分简表101 公式修正
  11. Iometer存储测试工具参数说明-4test setup
  12. java 分布式任务_分布式定时任务(一)
  13. SQL语句中查询数据
  14. 【9129】“移动媒体产品”的三个方向
  15. 股票交易sdk接口是什么意思?
  16. 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(二)
  17. 互联网让中国零售业弯道超车:近创新比黑科技重要
  18. Android 画布Canvas之控件连线操作
  19. npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! wlwl-dsfvue@1.0.0 dev: `node build/dev-server.js`报错
  20. 计算机仿真题液相色谱,毛细管电泳分离过程计算机仿真研究.pdf

热门文章

  1. javaSE----继承
  2. 输出100以内所有的质数
  3. 客户端连接不上kafka的解决方案
  4. php页面上必须有表单,php – 在同一页面上显示提交的表单响应. (没有重装)
  5. apimodel 可以重复吗_Web API是否需要有ViewModels层类?
  6. vue之组件之间的传值
  7. display: flex的兼容性写法
  8. 疯狂的双十一也难挡股价的下跌,电商平台难道真的进入了瓶颈期?
  9. Linux下eclipse编译C/C++程序遇到 undefined reference to `pthread_create'的异常解决办法
  10. 解决思维导图软件Mindmanager Mindjet连接出错