欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

通过实例了解Java参数中的值传递和引用传递

程序员文章站 2022-07-10 18:51:06
深入了解值传递 和 引用传递值传递引用传递例题值传递对于基本数据类型,参数通过值传递。(把实参的值复制一份再传给形参,实参的值不会发生改变)引用传递对于引用类型,参数通过引用(对象的引用)传递。(把实参引用中地址值复制一份再传给形参,这时实参和形参地址所指向的是堆区内同一块内存空间)例题import java.util.Arrays;public class Dome {public static void change(int a,String s,Integer i,in...

深入了解值传递 和 引用传递

值传递

  • 对于基本数据类型,参数通过值传递。(把实参的值复制一份再传给形参,实参的值不会发生改变)

引用传递

  • 对于引用类型,参数通过引用(对象的引用)传递。(把实参引用中地址值复制一份再传给形参,这时实参和形参地址所指向的是堆区内同一块内存空间)

例题

import java.util.Arrays;

public class Dome {		
	public static void change(int a,String s,Integer i,int[] arr,MyData m) {
		a += 1;
		s += "world";
		i += 1;
		arr[0] += 1;
		m.data += 1;
  
		System.out.println("a="+a);
		System.out.println("s="+s);
		System.out.println("i="+i);
		System.out.println("arr="+Arrays.toString(arr));
		System.out.println("m.data="+m.data);
	}
	public static void main(String[] args) {
		int a = 1;
		String s = "hello";
		Integer i = 1;
		int[] arr = {1,2,3,4};
		MyData m = new MyData();
		
		change(a, s, i, arr, m);
	}
}
class MyData{
	int data = 10;
}

执行结果:
a=2
s=helloworld
i=2
arr=[2, 2, 3, 4]
my.data=11

值得注意的是:

  • String 、包装类都属于对象类型,所以必然是引用传递,但是由于String类和包装类都没有提供value对应的setter方法,我们无法改变其内容,所以导致我们看起来好像是值传递。

  • 包装类都是不可变类(不只是String),实际可变是因为改变后不再是原来的对象,而是新建的一个符合预期的对象。

感谢您的观看,转载、引用请注明出处!

相关标签: Java c++ spring