【问题标题】:method parameter, instance variable方法参数,实例变量
【发布时间】:2015-04-21 13:58:54
【问题描述】:

在下面的代码中我有this.name= name,当我打印出来时,我得到了学生的名字。 但是,当我更改 name= this.name 的代码时,我在打印输出中收到 null,这是为什么呢? 或者当我进一步更改name = name

public Student(String name, String groupName, int javaProf, String cprNumber, Gender gender) {
        this.name=name; 

        //"name" refers to method parameter and "this.name" refers to the instance variable. Instance field
        //takes precedence over method parameter and avoids name clash

        this.groupName = groupName;
        this.javaProf = javaProf;
        this.cprNumber = cprNumber;
        this.gender = gender;
        this.courses = new HashMap<>();
    }
}

【问题讨论】:

  • 您的问题的答案隐藏在代码sn-p的注释中。 :)
  • 因为this指的是你的实例变量。
  • 如果把代码改成name = this.name,就是把参数值设置为字段值,默认为null。你为什么要这么做?
  • @Jon Skeet 这是一个练习中的一个问题,可以更好地理解参数和实例变量的概念,谢谢大家的回复。

标签: java variables methods instance


【解决方案1】:

注释说明了一切:name 指的是方法参数,而this.name 指的是实例变量。

如果你写

name = this.name;

您将实例变量的值(最初为null)分配给方法参数的值)。因此,实例变量保持null

如果你写

name = name;

您将方法参数的值分配给方法参数的值。这基本上是一个空操作。同样,实例变量的值保持null

【讨论】:

  • 非常感谢您的清晰解释,我是 Java 初学者,因此有点难以掌握这个概念
【解决方案2】:

嗯,这很容易理解,您的方法将“name”作为参数,并且您的类有一个与“name”完全相同的变量,在 java 中我们使用保留字“this”来引用变量班级。在这种情况下,this.name 引用了 Student 类中的变量“name”,而“name”引用了构造方法的参数。

那么 name = this.name 返回 null 值只是因为 this.name 还没有被初始化

【讨论】:

  • 非常感谢您的解释!
【解决方案3】:

this.name=name --> 全局变量(可能为空)= 方法变量(可能是数据)。

name(它有数据)=this.name(可能为空),使两个变量都为空。

【讨论】:

  • 谢谢你,我从所有的解释中受益!
猜你喜欢
  • 2014-10-27
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 2014-10-18
  • 2017-02-15
  • 2012-06-07
  • 2011-08-27
  • 2014-03-06
相关资源
最近更新 更多