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

修改Java变量访问修饰符后对象属性值为何为null?

问题解答:为什么修改访问修饰符后输出null?

修改访问修饰符不会导致对象原有信息丢失,你遇到的问题核心是:两次运行的是完全独立的程序实例,前后的Student对象根本不是同一个。

具体原因拆解

  1. 第一次运行程序时,你创建了Student对象s1并给public的name赋值为"sarang",程序执行完毕后,这个对象会被Java垃圾回收机制销毁,内存中的数据也随之消失。
  2. 当你修改name的访问修饰符为private并重新运行程序时,JVM会启动全新进程,重新创建一个新的Student对象s1。这个新对象的private name没有被任何代码赋值(之前的赋值操作属于上一次运行,和本次无关),所以变量保持默认值null,调用getName()自然返回null。

访问修饰符的本质作用

public/private这类访问修饰符仅控制变量的访问权限:

  • public允许类外部直接读写变量
  • private限制只有类内部能直接访问,外部必须通过getter/setter方法操作

它们不会改变对象存储的数据,也不会导致已有对象的属性值丢失——只要对象还在内存中,属性值就会保留,只是外部能否直接访问的区别。

正确的操作方式

如果想在修改访问修饰符后得到"sarang",需要在修改后的代码中给新对象的name赋值,比如先给Student类添加setter方法:

public class Student {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然后在StudentUse类中通过setter赋值:

Student s1 = new Student();
s1.setName("sarang");
System.out.println(s1.getName()); // 输出"sarang"

内容的提问来源于stack exchange,提问作者Sarang Tripathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:43:23