关于形参和实参-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方法弹栈。

由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

所以,基本数据类型作为参数传递时,形参的改变不影响实参的改变,而引用数据类型作为参数传递时,形参改变,实参也相应的做出改变


猜你喜欢

转载自blog.csdn.net/weixin_41402352/article/details/80554550