面向对象语言(如Java)中:基本类型与对象在存储和参数传递上的区别



面向对象语言(如Java)中:基本类型与对象在存储和参数传递上的区别

转自:http://zhidao.baidu.com/question/1959395493986765260.html


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

2014-11-26 18:39 ★legend★  |  浏览 1313 次
题干没有看明白,谁能给我讲一下吗,谢谢
6.在调用方法时,若要使方法改变实参的值,可以(B)
A) 用基本数据类型作为参数
B) 用对象作为参数
C) A和B都对
D) A和B都不对
2014-12-11 15:18 网友采纳

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


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


  例如方法

1
echo(Point p)  

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

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

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

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


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


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

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

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

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


  综上,题目选B。


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

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

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

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

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值