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

2024-11-25 05:21:05
推荐回答(3个)
回答1:

看代码要先从主方法看
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

回答2:

太简单啦,放到eclipse中打个断点,看看如何一步一步执行的不就解决了么?
我这是教给你如何打渔啊。

回答3:

你分清楚什么是局部变量和全局变量,,,也就是变量的作用域,还有参数的传递不会改变值的!