请教高手!!,菜鸟免进!!!

hailong326 2001-09-22 08:45:43
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.println(v.i);
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i+ " "+i);
}
}
请教高手,帮我分析这段代码?我对这段代码很模糊!!
...全文
123 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dickmi 2001-09-24
  • 打赏
  • 举报
回复
o ? 各位为什么不运行一下呢?呵呵,盲目的得出结论,这道题其实仍有探讨的价值。
hailong326 2001-09-24
  • 打赏
  • 举报
回复
多谢各位!!
slade 2001-09-24
  • 打赏
  • 举报
回复
也就是传值和传引用的问题。
tiangou 2001-09-24
  • 打赏
  • 举报
回复
dcb123() 所言极是!
hexiaofeng 2001-09-23
  • 打赏
  • 举报
回复
呵呵,一道scjp的题

10 0
20
minubird 2001-09-23
  • 打赏
  • 举报
回复
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); //输出10 0
System.out.println(v.i); //输出20
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //v.i改为20,此时another外的v.i也为20
ValHold vh = new ValHold();
v = vh; //method another中的v.i为10
System.out.println(v.i+ " "+i); //输出10 0
}
/*object vh out of scope*/
}
dcb123 2001-09-23
  • 打赏
  • 举报
回复
结果是
10 0
20
原因是java语言在将对象作为参数传入时,仅是在内存中复制了一个变量指向这个对象,然后将这个复制了的对象传入;所以在方法内对此传入对象属性的修改实际上是对原对象的修改;但是,在方法内对此传入对象的重定向并不能改变该对象的指向!

E-农民说说俺说的对不对?
leizhengdeng 2001-09-23
  • 打赏
  • 举报
回复
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);//another函数返回后v.i=20(被vh改变了), 这里的局部变量的i是99
System.out.println(v.i);
}
public void another(ValHold v, int i)
{
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh; //v.i=vh.i=10,
System.out.println(v.i+ " "+i); //v.i=10, i是局部变量0
}
}
提醒:局部变量的值是优先于全局变量和类成员变量
如:
class A
{
private int i;
public A(int i)
{ i++;//这里的i是局部变量
this.i = i;//这里的i也是局部变量,即从参数传过来的,类A的i要通过特定对象来指出。
}
}

zzj4 2001-09-23
  • 打赏
  • 举报
回复
放大话,这代码菜鸟都能摆平了
咚咚咚咚咚咚 2001-09-23
  • 打赏
  • 举报
回复
怎么了,菜鸟就不会了吗?
panq 2001-09-22
  • 打赏
  • 举报
回复
小可是一菜鸟。

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); //输出10 0
System.out.println(v.i); //输出20
}
public void another(ValHold v, int i){
i=0;
v.i = 20; //v.i改为20,此时another外的v.i也为20
ValHold vh = new ValHold();
v = vh; //method another中的v.i为10
System.out.println(v.i+ " "+i); //输出10 0
}
}
jusan 2001-09-22
  • 打赏
  • 举报
回复
10 10
p9 2001-09-22
  • 打赏
  • 举报
回复
注意一下变量的作用范围就可以了!
应该输出如下:
10 0
20

wyzegg 2001-09-22
  • 打赏
  • 举报
回复
应该打印出10 0

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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