下载此文档

值传递和引用传递.docx


文档分类:生活休闲 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的 值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。
引用传递:(形式参数py
testl 方法中的 age=20
main方法中的age=20
4:理解按引用传递的过程一一内存分配示意图
要想正确理解按引用传递的过程,就必须学会理解内存分配的过程,内存分配示意图可以辅助我们去理解这个过程。
用上面的例子来进行分析:
(1):运行开始,运行第8行,创建了一个A的实例,内存分配示意如下:
main方法中的变量a
这是一个也的实例 此时age = 0;
(2):运行第9行,是修改A实例里面的age的值,运行后内存分配示意如下:
这是—牛A的实例
main方法中时变矍在 ►此时age= i0.
(3):运行第10行,是把main方法中的变量a所引用的内存空间地址,按引用传递给testl方法中的a变量。请注意:这两 个a变量是完全不同的,不要被名称相同所蒙蔽。
送是一个A的实例
此时 age = 10»
内存分配示意如下:
main右法中的变屋a —
賦值给、£按引用倍谨)
testl右法中的变量EL
由于是按引用传递,也就是传递的是内存空间的地址,所以传递完成后形成的新的内存示意图如下:
main方法中的变墾
testl右法中的变量
也就是说:是两个变量都指向同一个空间。
:运行第3行,为testl方法中的变量a指向的A实例的age进行赋值,完成后形成的新的内存示意图如下:
此时A实例的age值的变化是由testl方法引起的
:运行第4行,根据此时的内存示意图,输出testl方法中的age=20
:运行第11行,根据此时的内存示意图,输出main方法中的age=20
5:对上述例子的改变
理解了上面的例子,可能有人会问,那么能不能让按照引用传递的值,相互不影响呢?就是testl方法里面的修改不影响到main 方法里面呢?
方法是在testl方法里面新new 一个实例就可以了。改变成下面的例子,其中第3行为新加的:
[java] view plain copy
public class TempTest {
private void test1(A a){
a = new A();//新加的一行 在内存中又分配了一个地址
= 20;
("test1 方法中的 age="+);
6・ }
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
= 10;
t・test1(a);
(”main 方法中的 age=”+);
}
14・}
class A{
public int age = 0;
}
运行结果为:
[java] view plain copy
testl 方法中的 age=20
main方法中的age=10

值传递和引用传递 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xiaobaizhua
  • 文件大小121 KB
  • 时间2022-08-29