Java中的参数传递方式到底是引用传递还是值传递?
来源:互联网 发布:js单步断点调试快捷键 编辑:程序博客网 时间:2024/05/16 11:46
Java中的参数传递方式到底是引用传递还是值传递?
事实上,Java中方法参数传递的是原来对象引用的copy(副本)。如果你在方法中改变这个copy中的内容,因为这个copy也是指向原对象,所以改变会生效。给你带来好像Java中存在地址传递一样。而实际上当你对这个对象的引用进行操作,例如object = new SomeObject();这样的操作是无效的,因为你改变的是这个copy(副本),原来的引用还是指向原来的对象,并没有发生变化。
下面举个例子来进一步说明吧。
运行结果:
Name =:Bob | Age =:21
Name =:Alex | Age =:24
解释:
我们的目的是想通过changeAttr函数,改变被传入的实参Person对象的成员变量。按照C++的思想,如果对象是以传址方式进行参数传递,那么必然可以达到我们的目的。但是Java已经明确规定参数是以传值方式进行传递的,并且从上面这个例子中可以看出,我们也确实达到了预期的目标。
这是怎么回事?这是因为Java中方法参数传递的值就是原来对象的引用的副本。请注意,这里的引用并不是当初在Person p = new Person() ;语句中声明的p。而是p的一个副本,我们姑且假设这个副本为p2。因此我们在方法changeAttr中相当于是在使用p2对原对象进行修改。又由于p2是指向原对象的(因为p2==p),所以我们用p2对原对象进行的修改并不会因为程序退出了而失效。
但是如果我们现在想用一个函数来改变p所指向的对象,结果又将如何呢?请看下面的例子。
运行结果:
Name =:Bob | Age =:21
Name =:Bob | Age =:21
解释:
我们企图在函数changeReference中改变实参p所指向的对象,结果却失败的。为什么呢?因为正向我们之前说的,函数changeReference中的引用只是原对象引用的一个副本,即p2,并不是p。既然如此,我们在函数中只是改变了引用p2所指向的对象,而没有改变引用p所指向的对象。所以才会有现在的运行结果。
- Java中的参数传递方式到底是引用传递还是值传递?
- Java参数传递到底是值传递还是引用传递?
- Java中的参数传递到底是值传递还是引用传递?
- JS 参数传递到底是值传递还是引用传递?
- Java 参数传递(到底是值传递 还是引用传递)
- java参数传递时到底是值传递还是引用传递
- Java的参数传递到底是引用传递还是值传递
- JAVA传参数到底是值传递还是引用
- Java中参数传递是值传递,还是引用传递
- 到底是值传递还是引用,Java
- Java中到底是值传递还是引用传递?
- Java-String 到底是值传递还是引用传递
- Java里到底是引用传递还是值传递
- Java到底是值传递?还是引用传递?
- Java到底是值传递还是引用传递
- java到底是值传递还是引用传递
- Java到底是值传递还是引用传递?
- Java:到底是值传递还是引用传递
- 传说——感觉被忽略了
- hello csdn!
- 转:vim的复制粘贴小结
- js区分浏览器
- hibernate id Generator
- Java中的参数传递方式到底是引用传递还是值传递?
- delphi获取当前计算机所有盘符
- 仿youku鼠标悬停js
- uda1341声卡的linux 2.6.28版本内核驱动在arm s3c2440上的移植。
- 剖析Linux系统中硬链接与软链接的区别
- 多域控制器环境下Active Directory灾难恢复
- 为什么申请了VIP会员不给分?
- LINUX目录详解
- C#连接数据库和更新数据库