【问题标题】:Why assign a variable to another variable?为什么将一个变量分配给另一个变量?
【发布时间】:2014-10-02 18:43:11
【问题描述】:

我不明白为什么要这样做:

public class Example {
    private String name;
    private String surname;

    Example(String firstName, String secondName) {
        name = firstName;
        surname = secondName;
    }
    // whatever other code goes here
}

我不明白为什么需要设置 name = firstNamesurname = secondName。为什么我不能直接设置namesurname

【问题讨论】:

  • 您直接设置它们。
  • 好吧,那个构造函数至少不会编译。
  • @Compass 为什么不呢?这个类编译得很好。
  • @bcsb1001 在进行编辑之前,它是Example(firstName, secondName)

标签: java variable-assignment


【解决方案1】:

这些不是同一类变量:

  • firstNamesecondName 是方法参数。一旦方法结束,这些变量就会超出范围
  • 另一方面,namesurname 是类中的字段。只要实例存在,它们就会一直“附加”到该类的实例。

以下是其含义的说明:

String a = "Hello";
String b = "World";
// For the duration of the constructor, a becomes firstName,
// and b becomes secondName
Example e = new Example(a, b);
// Once the constructor exists, firstName and secondName disappear.
// Resetting a and b after the call is no longer relevant
a = "Quick brown fox jumps";
b = "over the lazy dog";
System.out.println(e.getName()+" "+e.getSurname());

ab 的值已更改,但 Example 中存储的值仍设置为您传递给构造函数的值。

【讨论】:

    【解决方案2】:

    最好这样写(好习惯):

    Example(String firstName, String secondName) {
        this.name = firstName;
        this.surname = secondName;
    }
    

    This 指的是这个对象。 firstname 和 secondname 都是您稍后将传入的参数。因此,您正在为示例对象的字段分配两个值

    【讨论】:

    • 在他的例子中没有必要包含this,因为没有冲突的变量名。
    • 没有必要,但为了清楚起见建议,至少我在学习 OO 时是这样做的
    【解决方案3】:

    在这种情况下,firstName 和 secondName(作为函数参数)只有方法级别的范围,因此一旦控制从该方法返回,数据就会丢失。另一方面,name 和 surname 将被存储并可用于其他调用由此构造函数创建的对象。

    【讨论】:

      【解决方案4】:

      当您调用该方法时,您会将名称作为参数传递给您的参数名称和姓氏。

      Example test = new Example("Derrick", "Hamilton");
      

      然后名称将存储在从类创建的对象中。参数 name 和 surname 只是数据的临时持有者。构造函数完成后,这些变量将不复存在。

      【讨论】:

      • 名称作为参数传递 - firstNamesecondName 是参数。
      【解决方案5】:

      name 和 surname 是在名为 Example 的类中定义的实例(成员)变量。当您创建 Example 类的对象时,内存被分配给这两个变量并按默认值初始化。这些变量的范围保持到对象存在为止。您可以通过对象的引用访问这些变量。

      firstName 和 secondName 是局部变量(方法参数),一旦你拿出方法,这些变量的作用域就不存在了。您不能在方法之外访问这些变量。

      在 Example 方法中,这不是一般方法,它是 Example 类的构造函数。当您通过传递 firstname 和 secondName 的值来创建 Example 对象时,它将调用参数构造函数并将值从 firstname 设置为 name 并将 secondName 设置为 surname。

      为获得最佳实践,请始终使用参数构造函数定义默认构造函数。

      Example()
      {
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        • 2018-09-29
        • 2018-03-17
        • 1970-01-01
        相关资源
        最近更新 更多