关于形参和实参-java基础
引用类型数据和基本类型数据作为参数传递是有区别的,
class Demo1{
public static void main(String[] args){
int a = 4;
show(a);
System.out.println("a="+a);
}
public static void show(int a){
a = 5;
}
}
输出结果仍为4
基本数据类型作为参数传递时,就是将基本类型变量实参a空间中的值传递给调用的方法show(),当在show()方法中a视为形参,接受到值后,再在show()方法中对a变量进行操作,这时只会影响到show中的形参a。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的实参a值还是原来的值。
class Demo2 {
int x ;
public static void main(String[] args) {
Demo d = new Demo();
d.a = 5;
show(d);
System.out.println("a="+d.a);
}
public static void show(Demo d){
d.a = 6;
}
}
当引用数据类型变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.a=6时,会根据d所持有的引用找到堆中的对象,并将其a属性的值改为6.show方法弹栈。
由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。
所以,基本数据类型作为参数传递时,形参的改变不影响实参的改变,而引用数据类型作为参数传递时,形参改变,实参也相应的做出改变
还没有评论,来说两句吧...