一个Java程序题困扰了我好久,怎么想也没想明白到底是怎么回事,请各位Java大神出手帮帮忙看看~谢谢了!

//我是一个java新手,请大神指教一下,呵呵~classValue{publicinti=15;}publicclassTestValue{publicstaticvo... //我是一个java新手,请大神指教一下,呵呵~
class Value{
public int i = 15;
}
public class TestValue{
public static void main(String argv[]){
TestValue t = new TestValue();
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);
}
}
展开
 我来答
情以如风
2011-06-27 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:101
采纳率:100%
帮助的人:36.8万
展开全部
看代码要先从主方法看
public static void main(string argv[])就是主方法
所有的代码都是从这里开始运行的
TestValue t = new TestValue();
这是声明一个变量t 他的类型是TestValue
然后你再去看TestValue这个类
有两个方法一个是first() 一个是second(value v,int i);
主方法的第三句话是t.first();
就是说它调用了第一个方法first()
再看first()方法
int i=5;声明一个int类型的i值为5,
Value v = new Value();声明一个Value类型的v
v.i=25;为Value类型里面的plublic int i = 15这个i赋值 i是public 公有的所有v.i = 25;是起作用的
所以v.i的值就是25,
second(v,i);这里调用了second(Value v,int i)方法
把v传到second方法里面
i = 0; i赋值为0
v.i = 20; 把对象v里面的i赋值为20
Value val = new Value(); 声明一个Value类型的val
v = val; 把val的赋值给v
System.out.println(v.i + " " + i);打印val.i和的i
应该是打印15和0
最后在走first()方法的最后一段代码
System.out.println(v.i);
v.i前面赋值为25后来赋值为20 然后把val赋值给v
这里前两步骤是值传递 因为i是int类型的
val赋值给v是引用传递所以没有赋值,只是改变它的指向地址。
所以最后打印的结果是
15 0
20
追问
second(v, i);   
System.out.println(v.i);
v.i = 20;
System.out.println(v.i + " " + i);
这几个v.i为什么他的值不一样呢。这几个v.i把我这个基础不怎么扎实的我搞糊涂了。
麻烦你指教一下谢谢
百度网友7bd903d
2011-06-27
知道答主
回答量:15
采纳率:0%
帮助的人:0
展开全部
太简单啦,放到eclipse中打个断点,看看如何一步一步执行的不就解决了么?
我这是教给你如何打渔啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hostkey918
2011-06-27 · TA获得超过103个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:92.4万
展开全部
你分清楚什么是局部变量和全局变量,,,也就是变量的作用域,还有参数的传递不会改变值的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式