技术问题,可惜没分,只能到这里来发了,忘高人指教,万分感谢

caofeng891102 2011-01-25 10:18:44
一条scjp题目:
package packages.ds.time;

class Foo{
private int x;
public Foo(int x){
this.x=x;
}
public void setX(int x){
this.x=x;
}
public int getX(){
return x;
}
}
public class Gamma {
static Foo fooBar(Foo foo){
foo=new Foo(100);
return foo;
}

public static void main(String[] args) {
Foo foo=new Foo(300);
System.out.print(foo.getX()+"-");

Foo fooFoo=fooBar(foo);
System.out.print(foo.getX()+"-");
System.out.print(fooFoo.getX()+"-");

foo=fooBar(fooFoo);
System.out.print(foo.getX()+"-");
System.out.print(fooFoo.getX());
}
}



大家都看看。。这答案是什么?,最好能够帮我分析分析第二个获取的x值,怎么和我以前学习到的知识有冲突啊。。。
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
opmic 2011-01-25
  • 打赏
  • 举报
回复
第二个值是这样,
在执行方法时,方法参数引用都是新创建的,
就是说此新建了个引用指向原谅引用指向的地址,
在上面那种情况 foo=new Foo(100); 把新建的引用指向一个新的地址(内存)
原谅引用指向地址中的内容并没有变化
opmic 2011-01-25
  • 打赏
  • 举报
回复
300-300-100-100-100
悠忧虫 2011-01-25
  • 打赏
  • 举报
回复
fooBar改变了foo的引用
lg_asus 2011-01-25
  • 打赏
  • 举报
回复
opmic的答案是正確的。

在傳引用的時候是複製一個進行傳送的,而不是原來的。

23,405

社区成员

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

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