您的位置:首页 > 编程语言 > Java开发

Java中有关this的一个问题

2017-03-14 19:39 176 查看
先看这样一个简单的程序:

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来指明域变量,否则编译器将认为语义不清,从而调用其默认值。

这个问题看似简单,但如果我们在平时的编程中稍有不注意,也是很容易犯这样的错误的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java this 构造器