键盘手C 2016-04-19 07:29 采纳率: 60%
浏览 1583

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,然后修改,然后就变了
我不明白的是为什么第一个例子里没有这麽做。第二个却在堆栈中操作了,难道两个例子的修改值不在一个层面上吗,求解答,谢谢

  • 写回答

4条回答 默认 最新

  • magicioney 2016-04-19 07:37
    关注

    第一次,你做的工作基本是这样:你有一根线,线的名字叫x,线的尽头绑着一个数字,数字是5,。你呢叫来一个人,把5给他了。他呢拿了一根线,线的名字叫y,他把这根线绑在了5上。然后他从兜里掏出一个数字,3。然后把他那根叫y的线解开了,重新绑到了3上。然后他跟你说完事了。你一拉你得线,拉出来的还是5。
    第二次,你还是有一根线,名字叫obj。这个obj是个盒子,盒子里有一个线,叫x。绑着5。你又把他给人了,那人也用一个叫obj的线绑盒子上(虽然名字相同,单并不是同一根线)然后他一拉线拿出盒子来,盒子里不是有根线x么,他解开,绑了一个3上去。然后告诉你完事了。你一拉你得线,拿到一个盒子,再拉盒子里的线,拿到的就是3了。

    评论

报告相同问题?

悬赏问题

  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统