值传递和引用传递

什么是值传递?

直接拷贝一份数据并传递过去,等于是两份数据,对拷贝过去的数据进行了修改,那么原来的数据是没有收到影响的。java中对于基本数据类型的传递就是值传递。所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了,所以java在传递数据量很小的数据是值传递,自然就是基本数据类型是使用值传递。

public static void main(String[] args) {

	int a=1;
	aaa(a);//传递一个基本数据类型进去,并修改
	System.out.println(a);// 实际输出a还是1,并不改变,

 int[] aa={1,2,3,4,5};
	System.out.println(aa[0]);  //输出1
	bbb(aa);//引用传递进去修改a[0]
	System.out.println(aa[0]); //输出0,是一个有效的修改,因为是引用传递,修改了同一个地址空间
	
  }
public static void aaa (int a) {
	a=10;
	System.out.println("change: "+a);
}

public static void bbb (int[] a) {
	a[0]=0;
}

什么是引用传递?

对于一个对象,一个引用a指向这个对象,那么在传递的时候,会有另一个引用指向这个对象,并不是复制了一个对象的副本。而是产生了另一个引用,指向同一个地址空间,这就是引用传递,显然这种状况下,修改数据,会对前一个引用也产生影响,因为大家都指向同一个地址空间。比如Object,二维数组,List,Map等除了基本类型的参数都是引用传递

还是上面的例子中可以看到。


猜你喜欢

转载自blog.csdn.net/u010365819/article/details/80459946
今日推荐