A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ~与狼共舞~ 中级黑马   /  2013-5-23 00:33  /  1765 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ~与狼共舞~ 于 2013-5-23 22:03 编辑

      当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递呢?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 鼓励

查看全部评分

12 个回复

倒序浏览
个人感觉引用传递
回复 使用道具 举报
对象时引用类型,所以是按照引用类型进行传递的。
回复 使用道具 举报
引用传递,方法通过接受这个引用可以对对象进行操作!!!
回复 使用道具 举报
楼主提问题的时候尽量详细,如果不懂怎么加分,请看我下面的个性签名
回复 使用道具 举报
按值传递:指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。
说明:使用该方式传递的参数,参数原始的值不发生改变。

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

在Java语言中,对于那些数据类型是按值传递,那些数据类型是按址传递都作出了硬性规定,如下所示:
按值传递的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址。关于String的特殊性见本博客的String类深入解析)。
按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 山寨

查看全部评分

回复 使用道具 举报
楼上好高,学习恨透
回复 使用道具 举报
lpflpy 中级黑马 2013-5-23 12:12:00
8#
必须是地址传递,传入对象就是传入对象在内存中的首地址
值传递,是不会改变原值的大小
回复 使用道具 举报
杨彬 中级黑马 2013-5-23 13:39:52
9#
必须是值传递。
java编程语言只由值传递参数,当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用。对象的内容可以在被调用的方法中改变,但是对象的引用是永远不变的  希望可以帮到你{:soso_e182:}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈潜 发表于 2013-5-23 11:07
按值传递:指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内 ...

就按这么理解了,千万得是正确的啊
回复 使用道具 举报
必须是引用传递,否则是复制一份传给函数,并不会改变原值!
回复 使用道具 举报
函数的参数传递
基本数据类型的变量作为实参传入函数之后,在函数中将形参改变,调用处的实参不变。
因为基本数据类型的值是直接存在变量中,传入函数之后函数中的形参也同样存了一个值,这两个值是没有联系的,所以函数中将形参改变时修改的只是函数中的变量的值,和调用处的实参无关。
引用数据类型的变量作为实参传入函数之后,在函数中将形参改变,调用处的实参改变。
因为引用数据类型变量中存储的是地址,传入函数之后函数中的形参存储的也是同样一个地址,函数中将这个形参改变时改变的都是同一个地址上的对象,所以一边改变两边都变。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
java中只有值传递 没有传引用的概念
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马