“在调用方法时,若要使方法改变实参的值”这句话什么意思

题干没有看明白,谁能给我讲一下吗,谢谢6.在调用方法时,若要使方法改变实参的值,可以(B)A)用基本数据类型作为参数B)用对象作为参数C)A和B都对D)A和B都不对... 题干没有看明白,谁能给我讲一下吗,谢谢
6.在调用方法时,若要使方法改变实参的值,可以(B)
A) 用基本数据类型作为参数
B) 用对象作为参数
C) A和B都对
D) A和B都不对
展开
 我来答
百度网友1fcf34c73
推荐于2017-05-21 · TA获得超过865个赞
知道小有建树答主
回答量:400
采纳率:100%
帮助的人:455万
展开全部

  这里你可能得理解一下实参和形参的概念。


  在调用函数时,会给参数赋一个临时名称用于函数内部,这个名称(参数名)叫做形参,实际传入方法的参数,叫实参。


  例如方法

echo(Point p)  

  其中的p就是一个形参,在方法echo中可以使用标识p来引用。

  而调用该方法时,需要一个外部变量,如下

Point x= new Point(1,2);//Point类只是一个例子,换成其他东西不影响理解
echo(x)

  那么此处的x就是实参,在方法外部可以使用。


  因此,实参的作用域在方法外,形参的作用域在方法内。


  更进一步,面向对象语言中,基本类型和对象在参数传递的过程中,有不同的形式:

  1. 对于基本类型,传递的时候,将实参值复制,方法内获得的形参与实参没有关系,只是值相同,称为值传递,在方法中修改形参不影响实参;

  2. 对于对象,传递的时候,将实参引用复制,形参与实参引用相同,指向的是同一个对象,称为引用传递,在方法中修改形参会影响实参;

  3. 此处还有一种例外,对于类似String这种的不变类,仍然是引用传递,形参和实参相同。但修改时是创建了一个新对象赋给形参,这当然不会影响实参;


  综上,题目选B。


  最后,为什么要分引用传递与值传递呢?其实是面向对象语言中对于基本类型和对象的储存方法不同:

  1. 基本类型类型简单,长度固定,只有一个在栈上的值来表示;

  2. 对象类型复杂,长度不固定,有一个在栈上的值来表示地址(引用),通过此地址来访问堆上的实际数据;

  3. 方法传递时,将栈上的对应值(实参)复制,传递给另一个方法(形参);

  4. 此时,对于基本类型,复制了值,就是值传递;对于对象,复制了地址,但堆上的实际数据相同,就是引用传递。


  更具体的堆栈学习,在进一步的书籍中看吧,简单提一句:栈用于方法调用,堆用于数据存储。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式