You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:07:31