【发布时间】:2014-02-20 07:40:20
【问题描述】:
'this' 用于访问当前正在使用的对象。与传递对象本身相比,它有什么优势,因为该方法无论如何都会访问正在传递的当前对象。
【问题讨论】:
-
请添加描述源代码的任何具体问题情况。
-
这用于访问当前类变量或方法。用于区分实例变量和局部变量。
标签: java methods parameter-passing this
'this' 用于访问当前正在使用的对象。与传递对象本身相比,它有什么优势,因为该方法无论如何都会访问正在传递的当前对象。
【问题讨论】:
标签: java methods parameter-passing this
它在很多情况下都有帮助。最明显的是在构造函数中,当参数名称与实例变量相同时:
public final class Foo
{
private final int bar;
public Foo(final int bar)
{
this.bar = bar; // MUST specify "this" here
}
}
【讨论】:
与传递对象本身相比,它有什么优势? 方法将访问正在传递的当前对象 无论如何。
根据您关于使用this 关键字的优势的问题传递对象本身 是this 是Java 中的final 变量,而传递时的对象可能是也可能不是@ 987654324@。作为一个final 变量,我可以清楚地看到使用this 超过传递对象本身的两个主要优势。
不能为this 的当前实例分配任何新值。
this = new Foo(); //compilation error; cannot assign value to final variable : this
可以在同步块中使用。
synchronized(this){
/*this synchronized block will be locked on current instance*/
}
除了问题中设置的上下文之外,在 Java 中使用 this 有很多优点,您可以从其他答案中找出。
希希尔
【讨论】:
this 很少真正需要 - 如果我没记错的话,只有当您有一个与局部变量同名的字段并且您想明确指定要访问该字段而不是局部变量时。
【讨论】:
this 用于访问当前类variable 或methods。用于区分实例变量(ivars)和局部变量。
【讨论】:
如果我理解正确,你想做的事
static void f(MyClass self) {
// access current class object using self
}
而不是
void f() {
// access current class object using this
}
并以这种方式调用方法
MyClass.f(instance);
不是这个
instance.f();
虽然这实际上是可能的,但如果需要访问它,您总是必须将当前对象作为参数传递。为什么不直接将对象隐式传递给非静态方法?这就是 java 所做的。
当您查看构造函数时,您会注意到无法将当前类对象传递给它,因为在调用构造函数之前该对象不存在。所以你不能在构造函数中访问当前的类对象。
【讨论】: