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吗?
结果如下图
[img]http://dl2.iteye.com/upload/attachment/0091/2920/5c127078-69c5-3481-b34e-efdd48827403.png[/img]
原因是,所有基本数据类型的参数传递都是值传递,也就是说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的值有分别是多少?
结果如下
[img]http://dl2.iteye.com/upload/attachment/0091/2922/f8b229f0-1c90-3c92-8859-c2cdfb5a469b.png[/img]
也就是说,把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的名字
结果
[img]http://dl2.iteye.com/upload/attachment/0091/2924/dc7d1742-8010-3745-bac2-dbd1dc58a814.png[/img]
很显然,student3的名字也被改变了,为什么?
因为,对象类型的变量存储的是对象在内存中的首地址。当一个对象类型的变量的值改变时,意味着它能访问到的堆内存空的首地址也将改变,上示代码中,student3赋值给了student1,以为这student1也将保存student3的地址,因为他们访问的将是同一个地址,因而一个该了地址中的内容,下一个访问时也将是已经改变了的内容。这就是引用传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值