【问题标题】:Not sure if two methods are equivalent不确定两种方法是否等效
【发布时间】:2021-06-28 20:42:32
【问题描述】:

这两种方法是否等效?第一个是在我正在学习的互联网课程中提供的,第二个是我自己提出的。他们似乎都在工作并给我相同的结果,但我是 Java 新手,可能不知道我在做什么。我的和第一个一样好吗?我不确定为什么在这种特殊情况下根本需要“this”,但我对以下行以及为什么有必要感到最困惑: Contact contact = this.myContacts.get(i);

private int findContact(String contactName){
    for(int i = 0; i < this.myContacts.size(); i++){
        Contact contact = this.myContacts.get(i);
        if(contact.getName().equals(contactName)){
            return i;
        }
    }
    return -1;
}



private int findContact(String contactName){
    for(int i = 0; i < myContacts.size(); i++){
        if(myContacts.get(i).getName().equals(contactName)){
            return i;
        }
    }
    return -1;
}

【问题讨论】:

  • 它们是完全相同的代码。唯一的区别是,第一次你将myContacts.get(i) 存储到一个变量中,而第二次你没有。
  • 如果编译器没有优化该变量并生成完全相同的代码,我会感到惊讶。
  • 直接变量contact 不是必需的。但是,他们的作者可能添加了它以使其更具可读性。然而,这是主观的。

标签: java object methods


【解决方案1】:

this 是对当前实例的引用,可用于访问其成员。如果一个标识符是明确的(比如 myContacts 在这种情况下),它是完全可选的。
这两种方法具有相同的功能。实现中的唯一区别是第一个将myContacts.get(i) 提取到局部变量,而第二个没有。不过,这与功能无关。

【讨论】:

    【解决方案2】:

    如果方法所在的类包含一个名为myContacts 的实例变量,那么最好使用this 来指定您正在使用特定实例的myContactsArrayList(或任何@ 987654324@是)。

    老实说,由于方法中没有其他变量,因此在这种情况下我不会使用this。但是,你绝对可以。

    我会给你一个例子,说明何时使用this 是个好主意。

    public class Example {
        int index;
    
        private void changeIndex (int index){
           this.index = index;
        }
    }
    

    在这种情况下,参数的名称与实例变量的名称相同。您可以使用this 指定您在代码中引用的变量。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多