Java入门总结------参数传递:值传递与引用传递


参数传递:值传递与引用传递

1.值传递:所有基本数据类型:byte short int long float double boolean char 加上String类型
下面,定义2个方法,作用显而易见:给参数t赋值以及让参数++
public static void change(int t){
		t = 1000;
	}
	public static int add(int t){
		t++;
		return t;
	}

再来执行如下代码
int a=10,b=5;
		//调用change方法改变a的值
		change(a);
		System.out.println(a);

结果a=?是1000吗?
结果如下图

原因是,所有基本数据类型的参数传递都是值传递,也就是说change方法执行的是:10=1000这行代码,这显然是无意义的,也就是说,参数t的改变并不影响a的值
再来执行下面这段代码
int a=10,b=5;
		//调用change方法改变a的值
		change(a);
		a=b;
		a=add(a);
		System.out.println("a="+a+"   "+"b="+b);

a和b的值有分别是多少?
结果如下

也就是说,把b的值赋给了a之后,a的值改变了,但是对b也是没有影响的
2.引用传递:所有的对象类型(类,接口,抽象类,数组)
引用传递又可以叫做地址传递。
看一下下面的代码
//创建学生对象
		Student student1=new Student();
		//调用方法设置名字
		student1.setName("比尔盖子");
		//再创建一个学生对象
		Student student2=new Student();
		//调用方法设置名字
		student2.setName("乔布斯");
		Student student3=new Student();
		student3.setName("小明");
		student1 = student3;
		student1.setName("改变student1名字");
                System.out.println("student3的名字是:"+student3.getName());

这里将student3的值赋给了student1,然后改变student1的名字,但输出的是student3的名字
结果

很显然,student3的名字也被改变了,为什么?
因为,对象类型的变量存储的是对象在内存中的首地址。当一个对象类型的变量的值改变时,意味着它能访问到的堆内存空的首地址也将改变,上示代码中,student3赋值给了student1,以为这student1也将保存student3的地址,因为他们访问的将是同一个地址,因而一个该了地址中的内容,下一个访问时也将是已经改变了的内容。这就是引用传递。

你可能感兴趣的:(java入门,参数传递,引用传递与值传递)