我应该用“这个”关键字时,我想引用实例变量的方法中?(Should I use “this” key

2019-08-19 16:14发布

我的老师说,当我尝试的方法中访问实例变量我应该总是使用this关键字,否则我会执行两次搜索。 本地范围的搜索,然后一个实例范围的搜索。

例:

public class Test(){
    int cont=0;
    public void Method(){
        System.out.println(cont);//Should I use This.cont instead?
    }
}

我希望他是错的,但我找不到任何理由。

Answer 1:

没有,只能用this当你有一个名称冲突,例如当一个方法参数具有相同的名称作为一个实例字段,它被设置。

它可以在其他时间使用,但我们很多人觉得这只是增加了不必要的空话的代码。



Answer 2:

必须使用this如果需要的话,因为名称冲突的,虽然这是最好避免那些完全。

可以使用this如果你的愿望。 这是纯粹的喜好问题。

应该使用this ,如果你的老师要求它在你的功课。



Answer 3:

this是一个别名或实例中当前实例的名称。 它是用于从当地人(包括参数)消歧实例变量是有用的,但它可以通过本身被用来简单地指代部件的变量和方法中,调用其他构造函数重载,或简单地指代实例。
见爪哇-当使用“这个”关键字
也这是指当前对象。 如果你有类变量的INT A和类的方法XYZ部分有INT A,只是为了区分这“A”你是指,你将使用this.A. 这仅是一个示例情况。

public class Test
{
int a;

public void testMethod(int a)
{
this.a = a;
//Here this.a is variable 'a' of this instance. parameter 'a' is parameter.
}
}

所以,你可能会说,
此关键字可以用于(它不能与静态方法中使用的):

        1)To get reference of an object through which that method is 
        called within it(instance method).
        2)To avoid field shadowed by a method or constructor parameter.
        3)To invoke constructor of same class.
        4)In case of method overridden, this is used to invoke method of current class.
        5)To make reference to an inner class. e.g ClassName.this


Answer 4:

你的老师是正确的,这将导致编译器双重搜索,如果你不使用this关键字。 首先,编译器会在局部范围内,如果编译器无法找到在局部范围的变量搜索,然后实例范围。

此外,当编译器代码转换成字节码,编译器将所有的前缀与实例变量this关键字。 所以,如果你自己使用this关键字,你实际上是减负的编译器和代码会更快编译。



Answer 5:

既然大家都已经给非模糊名的例子,我会使用时举一个例子this帮助:

public class Person {
    private final firstName;
    private final lastName;
    private final Date birthdate;
    private final Address address;

    @Override
    public boolean equals(Object otherObject) {
        if (!(otherObject instanceof Person) {
            return false;
        }

        Person otherPerson = (Person) otherObject;

        // Using this here help distinguishing the current instance and the other.
        return this.firstName.equals(otherPerson.firstName)
            && this.lastName.equals(otherPerson.lastName)
            && this.birthdate.equals(otherPerson.birthDate)
            && this.address.equals(otherPerson.address);
    }

}


Answer 6:

this仅适用于其中一个参数具有相同的名称作为类属性的情况下。

public class Dog {
   String name;
   public Dog(String name) {
      name = name; //but which name? Are we just assigning a variable to itself?
      // here you could say this.name = name. Or you could rename one of the variables to resolve ambiguity
   }
}


Answer 7:

我偶尔使用this ,因为自动完成的(使生活更轻松),但我事后清理它们。

请记住,清晰度是关键。 在这种情况下,很显然, cont是一个类变量,但如果你是用实例变量的桩写一个巨大的类,你可以考虑使用this为清楚起见。

你也只需要使用this时候有一个名称冲突,例如,

public class Ex {
    int num;
    public Ex(int num) {
        this.num = num; 
    }
}

在这个例子中,而NUM = NUM​​会引起碰撞,“这”避免它。 这是绝对有必要的只有一次,但同样的,往往清晰度更高的优先级。



Answer 8:

另一个地方this通常用于可读性是当一个内部类对象指的是其含有对象的字段。

public class Foo {

    String foostring;
    /* snip lots of code */
    private class Foohelper {
        void helperMethod(String bazstring) {
             Foo.this.foostring = bazstring;
             // etc.
        }
    }
}

编译器并不需要这一点,但它使情况寻找foostring更加清晰。 除了这个(!),我只是完全限定的字段名在那里他们可以通过参数名称被隐藏的构造,因为许多其他海报已经在这里说明。

[编辑:现在,我想想,也有一些地方的编译器需要这一点,例如,如果Foohelper.toString()要调用Foo.toString() 。]



文章来源: Should I use “this” keyword when I want to refer to instance variables within a method?