黑马程序员技术交流社区
标题: 一道JAVA练习题的困惑 [打印本页]
作者: 刘源 时间: 2012-8-3 09:49
标题: 一道JAVA练习题的困惑
本帖最后由 刘源 于 2012-8-3 21:05 编辑
“问题已经解决”。
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
这是为什么啊,有高手能帮我分析下吗?
作者: 郑正华 时间: 2012-8-3 10:37
本帖最后由 郑正华 于 2012-8-3 10:44 编辑
package cn.itcast.demo;
class Value
{
public int i = 15;
}
public class EnumDemo
{
public static void main(String argv[])
{
EnumDemo t = new EnumDemo();
t.first(); ←1.实例化EnumDemo类并调用first方法!进入first方法!
}
public void first()
{
int i = 5;
Value v = new Value();
v.i = 25; ←2.实例化Value对象并将对象v的i值赋值为25.
second(v, i); ←3.调用second方法,传递的参数是v对象和i值,此时i值为5.然后进入second方法!
System.out.println(v.i); ←8.打印first方法中实例化的v对象的i值。这个i值在second方法中已经修改为20.
}
public void second(Value v, int i)
{
i = 0; ←4.将0赋值给i,此时i=0,
v.i = 20; ←5.将first方法中的v对象中的i值改为20.
Value val = new Value();
v = val; ←6.再次实例化Value类并将val对象的引用给了参数v.也就是说把原本first方法中的v对象给覆盖掉了,因为没做修改,所以此时v中的i值默认还是Value类中的i值,即v.i=15.注意这里的val对象和first方法中的v对象不一样)
System.out.println(v.i + " " + i); ←7.打印v.i值和i值。
}
}
作者: 郑正华 时间: 2012-8-3 13:24
郑正华 发表于 2012-8-3 10:37
package cn.itcast.demo;
class Value
{
刘老师,你太好了!:'( 俺耐你!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |