标题: 面向对象的题目,求详细解释! [打印本页] 作者: 王小刚 时间: 2012-3-28 20:49 标题: 面向对象的题目,求详细解释! 我用电脑是找到结果了,但是完全搞不清,感觉很晕...
class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.print( v.i );
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i);
System.out.print(i);
}
}
求详细解释!作者: 田啸 时间: 2012-3-28 21:06
运行结果应该是10,0,20
主函数中o.amethod();调用了amethod()方法,在amethod()方法中 another(v,i);调用了another函数
作者: dangfei 时间: 2012-3-28 21:10
public static void main(String argv[]){
Test3 o = new Test3();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.println( v.i ); //在another(v,i)中v指向的i已被重新赋值,20.
//第三个输出值,v.i为20.
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //给对象属性赋值
ValHold vh = new ValHold(); //创建新的ValHold对象,此时vh.i=10.
v = vh; //将vh的索引地址付给v
System.out.println(v.i); //第一个输出值,v.i及时vh.i是10.
System.out.println(i); //第二个输出值,i是局部变量,为0.
}
建议lz把print()都改成println(),这样结果便于观察作者: 周四川 时间: 2012-3-28 21:10
class ValHold
{
public int i = 10;
}
public class ObParm
{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i); //此时传递进去的v对象中的i=30,传递的int型i=99
System.out.print( v.i ); //此时应该打印的是30
}
public void another(ValHold v, int i){
i=0;//i从99变成0
v.i = 20; //此时v中的int i从30变成20
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i); //此时的i应该为10
System.out.print(i); //这个i应该为0
}
}
个人分析,应该没问题。。作者: 鲍亚坤 时间: 2012-3-28 21:25 本帖最后由 鲍亚坤 于 2012-3-28 21:26 编辑
其实就是语句执行,赋值问题,理理思路就行了。。
class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();//创建ObParm对象
o.amethod();//调用amethod()方法
}
public void amethod(){
int i = 99;//定义局部变量i
ValHold v = new ValHold();//创建ValHold()对象
v.i=30;//给ValHold中的i赋值i=30
another(v,i);//调用another方法,将v对象,和i=99作为参数
System.out.print( v.i );//输出ValHold类中的i值,20
}
public void another(ValHold v, int i){
i=0;//将参数i赋值为0
v.i = 20;//给ValHold类中的i值为 20
ValHold vh = new ValHold();//创建新的ValHold对象vh
v = vh;//将对象vh赋值给对象v 此时v.i的值为10
System.out.print(v.i);//输出v对象里i的值 10
System.out.print(i);//输出当前方法中i的值 0
}
}
复制代码
最后输出结果10020作者: 贠(yun)靖 时间: 2012-3-29 01:14
class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod(); //1 调用amethod()
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i); // 2 调用another() 此时 i=99 v.i=30 程序转到another()方法中并执行完
System.out.print( v.i ); //3 由 another中的(2)可知 v.i = 20 最后输出20
}
public void another(ValHold v, int i){ //3 v = new ValHold(),99 传进来
i=0; (1) i = 99 变成 i=0;
v.i = 20; (2) v.i=30 变成 v.i=20;
ValHold vh = new ValHold();
v = vh; (3) 把v的引用重新指向新的ValHold对象 即vh对象
System.out.print(v.i); (4) 这里的v.i 就是 vh.i 而vh对象没有给i改变值 所以是10 即现输出 10
System.out.print(i); (5) 由(1) 可知 i=0 再输出 0
}
}
所以最终结果是 10 0 20作者: 方江 时间: 2012-3-29 09:05
楼上借点分用一下,这代码还是有几个单词看不懂。。