基本类型和引用类型作为参数传递

来源:互联网 发布:c语言编译器vc6.0下载 编辑:程序博客网 时间:2024/06/11 21:52

引用类型数据和基本类型数据作为参数传递有没有差别呢?我们用如下代码进行说明,并配合图解让大家更加清晰

class Demo{    public static void main(String[] args){        int x = 4;//局部变量        show(x);        System.out.println("x="+x);//4    }    public static void show(int a){        a = 5;    }}

这里写图片描述

基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。

class Demo {    int x ; //全局变量    public static void main(String[] args) {        Demo d = new Demo();  x  0        d.x = 5;   x  5        show(d);  //对象的地址        System.out.println("x="+d.x);  x   6    }    public static void show(Demo d) {        d.x = 6;    }}

这里写图片描述
当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6.show方法弹栈。
由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

原创粉丝点击