2

我正在尝试理解以下有效的 Java 代码。我有两个问题,在代码中进行了注释。

class C {
  C x;  //1.) why is something like x = new C(); not required here?  Does this 
        //mean x refers to this current class of C?
  int f;
  void run(boolean b, int x) {
    C y;
    y = new C(); 
    if (b) { this.bump(y,x); } //2.) Is "this" in this.bump necessary?  Likewise,
                               //this.bump(this.y,x) would be equivalent right?
    else { f = this.x.f + 1; }  
  }
  void bump(C z, int j) {
    z.f=j;
  }
  }

谢谢,抱歉这些基本问题

4

6 回答 6

10

1.) why is something like x = new C(); not required here?

x 只是一个未初始化的引用。如果你想使用它,你确实需要为它分配一些东西。

2.) Is "this" in this.bump necessary?

No.this指的是当前对象,因为x它是当前对象的成员,在这种情况下您不需要它。

2a) Likewise, this.bump(this.y,x) would be equivalent right?

No.y是一个局部变量,你不能用this.y.

于 2012-12-11T20:54:51.750 回答
3

这个:

 C x;

声明在typex类中调用的单个字段。该语句没有设置 field 的任何初始值。和它基本相同;CCxC x = null

那个:

 this.bump(y,x);

this这里是多余的。你会得到同样的结果bump(y,x);

this.y在这种情况下不会编译,因为y它是一个局部变量(在方法内),而不是一个字段。

于 2012-12-11T20:56:14.430 回答
0

C x;表示您已经声明了一个名为 x 的 C 类型变量。你还没有创建一个实例,你通过调用x = new C();

从同一个类中调用成员方法时,不需要使用 this 关键字。

this.bump(this.y,x)不是你想的那样,因为 y 是一个局部变量(run 方法的局部变量)而不是一个类成员,所以你实际上会得到一个编译错误。

于 2012-12-11T20:56:18.967 回答
0

1.) C x这里没有引用任何东西。但是如果你分配它,它会引用一些类型的类C。这可能是当前类,但也可能引用了另一个类。例如,如果C是一个类Person,x 可以引用这个人的妈妈、爸爸、朋友等...
2.) 不,那里不需要它,因为没有以相同方式命名的局部变量。它的等价物。

于 2012-12-11T20:56:22.180 回答
0

1)new在堆而不是栈上分配内存

2) thisinthis.bump是不必要的。this.bump(this.y,x)不等价,因为class C没有名为的成员变量y

于 2012-12-11T20:56:26.590 回答
0

1.)为什么x = new C();这里不需要类似的东西?

默认情况下,参考是null. 由程序员决定是否需要初始化引用以指向某个对象。

这是否意味着 x 指的是当前的 C 类?

这里,x是对一些类实例的引用C。引用可以是(并且是)null

2.) 有this必要this.bump吗?

不。

同样,this.bump(this.y,x)将是等效的吗?

是的。

于 2012-12-11T20:56:31.823 回答