先看这样一个简单的程序:
class Construct {
int i=1;
Construct(int num,int i){
this.i=i;
}
public static void main(String[] args){
Construct ct=new Construct(2,3);
System.out.println(ct.i);
}
}
很显然,输出结果是3.
但如果我把构造器中的this去掉呢?即,将程序改为:
class Construct {
int i=1;
Construct(int num,int i){
i=i;
}
public static void main(String[] args){
Construct ct=new Construct(2,3);
System.out.println(ct.i);
}
}
程序能否编译通过?结果又是多少?
运行之后发现,编译能够通过,而且输出结果是1.
我们注意到系统给出了一个警告:"The assignment to variable i has no effect."
这个警告说明了构造器中的“i=i”是个毫无意义的语句。
经过debug发现,在对象ct创建时,构造器中的语句没有起到任何作用,对于i的赋值直接采用的是默认值1.
如果传入参数的名称和域变量的名称相同,则必须用this来指明域变量,否则编译器将认为语义不清,从而调用其默认值。
这个问题看似简单,但如果我们在平时的编程中稍有不注意,也是很容易犯这样的错误的。