Java中Setter方法setName()的赋值逻辑及变量修改疑问
Java Setter方法执行逻辑解析
问题描述
在Person类的setName()方法中,如果保留第一行name = this.name;,调用person.setName("vinoth")后,对象的name始终是初始化的"nidhi",无法修改;注释掉这行后,调用setName才能正常修改name值。需要明确this.name = name;的执行逻辑,以及为什么第一行代码会导致修改失效。
相关代码
/* * @author Sanganidhi S */ package com.testpractice; class Person{ private String name; private int age; public Person(String name,int age) { this.name=name; this.age=age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { //name = this.name; this.name=name; } public void setAge(int age) { this.age = age; } public void DisplayDetails() { System.out.println("Name : "+name); System.out.println("Age : "+age); } } public class GetterSetter { public static void main(String[] args) { Person person = new Person("nidhi",21); person.DisplayDetails(); person.setName("vinoth"); person.setName("riya"); person.DisplayDetails(); //System.out.println(person.getClass()); //System.out.println(person.hashCode()); } }
核心逻辑解析
this关键字的作用:Java里this代表当前对象的引用。当方法参数名和类的成员变量名重名时,必须用this区分:this.name指当前Person对象的私有成员变量name,不带this的name是方法的入参。name = this.name;的问题:这行代码是把对象已有的成员变量值(比如初始化的"nidhi")赋值给方法参数name,直接覆盖了传入的新值。之后执行this.name = name;时,name已经变回原来的成员变量值,所以成员变量name不会更新,始终是初始值。this.name = name;的正确执行:注释掉那行错误代码后,方法参数name就是调用时传入的新值(比如"vinoth"),这行代码把新值赋值给对象的成员变量name,完成更新,所以调用setName后对象的name会变成传入的新值。
内容的提问来源于stack exchange,提问作者HappyCoderNids
相关产品推荐
相关产品推荐

