+ -
当前位置:首页 → 问答吧 → 新人请教贴,关于this.x=x和x=x的问题

新人请教贴,关于this.x=x和x=x的问题

时间:2011-10-20

来源:互联网

主程序代码如下
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 T{
  static Foo fooBar(Foo foo){
  foo.setX(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.get()+"-");
  foo=fooBar(fooFoo);
  System.out.print(foo.getX()+"-");
  System.out.print(fooFoo.getX());
   
  }

}
输出结果是“300-100-100-100”,这个我能理解,但为什么将this.x=x换成x=x,就会变成“0-100-100-100”
将X=X不只是一个初始化X的初值么?怎么不能在第一次输出时付值300呢? 希望各位前辈赐教。谢谢!

作者: sq1949   发布时间: 2011-10-20

x=x那是传入参数的拷贝=传入参数的值,没有赋值给成员x,那么默认int类型的成员初始化值为0。所以如果你只改了构造函数的话,那么是0-100-100-100-100,如果两个都改了,那么是0-0-0-0-0.

作者: still_rain   发布时间: 2011-10-20

引用 1 楼 still_rain 的回复:
x=x那是传入参数的拷贝=传入参数的值,没有赋值给成员x,那么默认int类型的成员初始化值为0。所以如果你只改了构造函数的话,那么是0-100-100-100-100,如果两个都改了,那么是0-0-0-0-0.

方法的形参名和类属性名相同的话,不用this.区分,会默认是形参,你把
 public Foo(int x){this.x=x; }改成
public Foo(int y){x=y; }输出结果是“300-100-100-100”

作者: qxq198407   发布时间: 2011-10-20

热门下载

更多