Java构造器中使用this与不使用this是否存在差异?无参数冲突时使用this有影响吗?
嘿,这个问题问得挺到位的!先直接给你结论:在你给出的两个构造器例子里,完全没有功能上的差异——运行起来的结果一模一样,最终都是把当前对象的world字段分别设置为5和7。
为啥this在这里不影响功能?
你自己的理解其实很对:this最核心的作用就是区分同名的实例字段和方法/构造器参数。比如如果构造器是下面这种情况,this就必须用:
public Hello(int world) { this.world = world; // 这里要是不加this,编译器会把右边的world当成参数,相当于把参数赋值给自己,实例字段根本没被修改! }
但在你的例子里,构造器没有和world同名的参数,这时候:
- 直接写
world = 5:编译器会自动识别这是当前对象的实例字段(因为找不到局部变量或参数叫world) - 写
this.world = 7:显式指定要访问当前对象的实例字段,效果和上面完全一致
有没有极端场景会有区别?
几乎没有,但硬要抠细节的话:如果你的类里同时存在一个静态字段也叫world,那直接写world会优先访问静态字段,而this.world会强制访问实例字段。不过你的例子里world是private int的实例字段,所以完全不存在这个问题。
关于编码风格的小建议
这其实更多是团队规范的问题:
- 有些团队要求所有实例字段的访问都加
this,让代码更清晰,一眼就能区分是实例字段、局部变量还是静态变量 - 有些团队只在有命名冲突的时候才加
this,让代码更简洁
两种风格都没问题,只要团队内部保持一致就好~
内容的提问来源于stack exchange,提问作者SpongeBoobies
相关产品推荐
相关产品推荐

