黑马程序员技术交流社区

标题: 关于参数传递的问题 [打印本页]

作者: ~与狼共舞~    时间: 2013-5-23 00:33
标题: 关于参数传递的问题
本帖最后由 ~与狼共舞~ 于 2013-5-23 22:03 编辑

      当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递呢?
作者: 卢祥洲    时间: 2013-5-23 10:45
个人感觉引用传递
作者: 胡浩    时间: 2013-5-23 10:53
对象时引用类型,所以是按照引用类型进行传递的。
作者: 画饼    时间: 2013-5-23 11:01
引用传递,方法通过接受这个引用可以对对象进行操作!!!
作者: 袁梦希    时间: 2013-5-23 11:06
楼主提问题的时候尽量详细,如果不懂怎么加分,请看我下面的个性签名
作者: 陈潜    时间: 2013-5-23 11:07
按值传递:指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。
说明:使用该方式传递的参数,参数原始的值不发生改变。

按址传递:指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以后,参数原始的值发生改变。
说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发生改变。

在Java语言中,对于那些数据类型是按值传递,那些数据类型是按址传递都作出了硬性规定,如下所示:
按值传递的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址。关于String的特殊性见本博客的String类深入解析)。
按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
作者: tshch1989    时间: 2013-5-23 11:43
楼上好高,学习恨透
作者: lpflpy    时间: 2013-5-23 12:12
必须是地址传递,传入对象就是传入对象在内存中的首地址
值传递,是不会改变原值的大小
作者: 杨彬    时间: 2013-5-23 13:39
必须是值传递。
java编程语言只由值传递参数,当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用。对象的内容可以在被调用的方法中改变,但是对象的引用是永远不变的  希望可以帮到你{:soso_e182:}
作者: liuelxiwd    时间: 2013-5-23 14:39
陈潜 发表于 2013-5-23 11:07
按值传递:指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内 ...

就按这么理解了,千万得是正确的啊
作者: 821728010    时间: 2013-5-23 14:43
必须是引用传递,否则是复制一份传给函数,并不会改变原值!
作者: 张得贵    时间: 2013-5-23 15:55
函数的参数传递
基本数据类型的变量作为实参传入函数之后,在函数中将形参改变,调用处的实参不变。
因为基本数据类型的值是直接存在变量中,传入函数之后函数中的形参也同样存了一个值,这两个值是没有联系的,所以函数中将形参改变时修改的只是函数中的变量的值,和调用处的实参无关。
引用数据类型的变量作为实参传入函数之后,在函数中将形参改变,调用处的实参改变。
因为引用数据类型变量中存储的是地址,传入函数之后函数中的形参存储的也是同样一个地址,函数中将这个形参改变时改变的都是同一个地址上的对象,所以一边改变两边都变。
作者: 占琳    时间: 2013-5-23 17:46
java中只有值传递 没有传引用的概念




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2