Java中值传递和引用传递

java中只有值传递

先上概念:java程序设计语言中,总是采用按值传递,也就是说,一个方法中所获得参数,都是原来实参的一个拷贝。

具体要讲清楚这几个概念,需要搞清以下几个例子就好了:

1、java中基本数据类型的传递,都是值传递:
double num=10;
sample.change(num);
public static smaple(double anum)
{ anum=anum*3;
}
此方法调用完成以后,num仍旧等于10,而anum作为形参,刚开始,anum=num=10,然后,anum=anum*3=30,然后用完就释放掉了。
图例如下:
这里写图片描述
有一条一定要记住:所谓引用传递还是值传递,其根本区别在于是否改变了原始定义的那个变量的值,也就是上图中的num!!!
2、但是如下有一种情况,会让部分人迷惑:
例如:
有一个修改成绩的方法,和一个学生对象:
public class Student{
int id;
int num;
String name;}
修改成绩的方法:
public static void change(Student s){
s.num=s.num+10;}
Student st=new Student(10010,75,”Li”);
change(st);
此时,st.num变为85。
具体过程如下:
这里写图片描述
通过上述图示,容易看出,s和st指向同一个对象,但是值得注意的是,此时s得到的Student对象的地址为在st哪里拷贝过来的,并不是直接用的st存储的地址,也就是s和st处存储对象地址的位置并不一样。
此时,会有人迷惑,这不是修改了原始对象的值了吗,怎么不是引用传递?此时的问题在于,s修改了st处对象的地址了吗?并没有!!,所以此处仍是值传递,只不过是地址的拷贝!
3、下面例子看懂,就一切都懂了:
Student a=new Student(10010,66,”Li”);
Student b=new Student(10013,77,”Wang”);
publict static void shift(Student x,Student y)
{Student temp=x;
x=y;
y=temp;}
预判一下,结果如何?经过该函数后,a——>Wang和b——>Li,还是a和b的指向都未变?如果a和b的指向变了,说明java是引用传递,否则还是值传递。
结果证明,a——>Li,b——Wang并没有改变!!!
图示如下:
这里写图片描述
看到了吧,x和y指向变了,而a和b没变!所以仅仅依靠一个方法,是无法改变原来两个变量的指向的,java里面参数传递都是拷贝,没有引用,所以java里面只有值传递!!
好了,有问题请@我 ==

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITIRONMAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值