询问一道关于值传递的题

yjjbmk 2004-10-11 05:39:16
class Value{
public int i = 15;
}
public class Test{
public static void main(String argv[]){
Test t = new Test();
t.first();
}
public void first(){
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
public void second(Value v, int i){
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);
}
}
输出:15 0 20
请问:为什么第一个值输出是20啊???
...全文
62 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmyabc 2004-10-12
  • 打赏
  • 举报
回复
这个是这样的
v=val这是引用的转换,
原来v引用的对象的i值是15,后来赋值为25,传进去之后,又赋值为20,设这个对象为A,即A的i值为20
当在second函数中,将一个新对象B赋给了v,可是原来A的i值并没有变,只是v的引用变了,所以第一个输出的是20
不知道说明白了没有??
yjjbmk 2004-10-12
  • 打赏
  • 举报
回复
怎么没人啊???
黑马 2004-10-12
  • 打赏
  • 举报
回复
second(v, i);
是引用v的传递,在second方法里,将v.i赋值了20就改变了v对象的i值,所以第一个输出20


Value val = new Value();
v = val;
之后,v.i就是15,所以输出是15和0

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧