问题描述
- JAVA中函数的参数值的传递问题
-
在学习java中,遇到这样一个问题
class PasasVale{
public static void main(String [] args){
int x = 5;
change(x);
System.out.println(x);
public static void public change(int y){
y =3;
}
}
}
输出结果为5;
还有一个例子
class PasasVale{
public static void main(String [] args){
PassVale obj = PassVale();
obj.x = 5;
change(obj);
System.out.println(x);
public static void public chang(obj){
obj. y =3;
}
}
}
输出结果为3
也就是说结果被更改了
在分析里是这样说的,第一个例子,刚开始,main中的值为5,然后change中的值未定,然后传值,两个都为5,然后在change中修改了值为3,然后原来main中的值还是5,所以输出来为5
第二个例子,是引用了堆和栈的概念,说原来在栈中main中obj中存一个地址,然后指向堆内存中的5,这时,change值未定,然后又传值,这时change中却传的是地址,也指向了堆中的这个5,然后修改,然后就变了
我不明白的是为什么第一个例子里没有这麽做。第二个却在堆栈中操作了,难道两个例子的修改值不在一个层面上吗,求解答,谢谢
解决方案
第一次,你做的工作基本是这样:你有一根线,线的名字叫x,线的尽头绑着一个数字,数字是5,。你呢叫来一个人,把5给他了。他呢拿了一根线,线的名字叫y,他把这根线绑在了5上。然后他从兜里掏出一个数字,3。然后把他那根叫y的线解开了,重新绑到了3上。然后他跟你说完事了。你一拉你得线,拉出来的还是5。
第二次,你还是有一根线,名字叫obj。这个obj是个盒子,盒子里有一个线,叫x。绑着5。你又把他给人了,那人也用一个叫obj的线绑盒子上(虽然名字相同,单并不是同一根线)然后他一拉线拿出盒子来,盒子里不是有根线x么,他解开,绑了一个3上去。然后告诉你完事了。你一拉你得线,拿到一个盒子,再拉盒子里的线,拿到的就是3了。
解决方案二:
第二次,你得obj绑着一个盒子,- - 写着写着就飞了……
解决方案三:
参数值的传递不是函数的任务!
解决方案五:
第一问。
int x = 5;
change(x);将参数x(引用地址),而不是值5,传递到这个方法中。
x改头换面,摇身一变化妆成y,在这个方法中。将5这个值赋给y,也就是赋给了x。
只是画了一下妆。
第二问。
传进来的是一个对象。这个对象.x,对象.y 是两个不同的参数,改变x 当然不会影响y,反之亦然。
时间: 2024-10-25 12:36:40