这个问题不是重复的
这个问题与"This"在Java中的含义无关。这是一个关于属性的不同语法的问题,我正试图根据我对另一种语言的理解来澄清。我一直在通过android文档工作,看到相同的属性引用不同,我想知道为什么。
问题
在Objective-C中,当声明属性时,它会自动合成getter和setter,然后通过点语法进行访问,如下所示:
self.someProperty;
然而,在后台,这实际上是在调用:
[self someProperty];
- (id) someProperty {
return _someProperty;
}
// or
[self setSomeProperty:someValue];
- (void) setSomeProperty:(id)someProperty {
_someProperty = someProperty;
}
自动合成的一部分还生成一个带有'_'前缀的变量,您可以直接访问该变量。总结一下,
_someProperty;
// and
self.someProperty;
通常指同一变量;然而,实际上,self.someProperty
调用该方法,而_someProperty
直接访问内存。在Java中,如果我在文件的顶部像这样声明一个属性:
private String someStringProperty;
是否有某种自合成在后台使这些语句不同?
someStringProperty = new String();
// or
this.someStringProperty = new String();
没有区别。当你使用"this"时,你是在使用这个对象。使用"this"不是进行方法调用。
someStringProperty = new String();
// or
this.someStringProperty = new String();
这两个语句相等。使用"this"只是为了让它更容易读。
在Java中,this
指的是"当前"对象,即被调用的方法或构造函数所属的对象。通常,您将使用this.someProperty
而不仅仅是someProperty
来区分局部变量和对象的属性(参见http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html的示例)。