Java中有关this的一个问题

先看这样一个简单的程序:

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

这个问题看似简单,但如果我们在平时的编程中稍有不注意,也是很容易犯这样的错误的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值