我对Java很陌生,并且与以下代码混淆:
[tableView setContentOffset:CGPointMake(240, 0) animated:FALSE];
[tableView reloadData];
,即使更改了public class NewNode {
NewNode next = null;
int data;
public NewNode(int data) {
this.data = data;
}
public void addToNode(int data){
NewNode n = this;
System.out.println(n);
NewNode newlyCreated = new NewNode(data);
}
}
方法如下:
addToNode
n的输出不变。如果 public void addToNode(int data){
NewNode newlyCreated = new NewNode(data);
NewNode n = this;
System.out.println(n);
}
关键字指向对象的当前实例,则在第二种情况下不应将this
用作输出。请帮助...。
答案 0 :(得分:4)
在实例方法或构造函数中,
this
是对当前对象的引用,该对象是正在调用其方法或构造函数的对象。
因此,在两个示例中,this
都指向您在{em>上调用addToNode()
的对象。您在方法内创建对象的事实是无关紧要的。所以:
public void addToNode(int data){
NewNode n = this; //Refers to the object this method is called on
System.out.println(n);
NewNode newlyCreated = new NewNode(data); //Creates a random object
}
public void addToNode(int data){
NewNode newlyCreated = new NewNode(data); //Creates a random object
NewNode n = this; //Refers to the object this method is called on
System.out.println(n);
}
答案 1 :(得分:3)
this
是当前实例,即调用addNode
方法的实例。
因此,当您通过NewNode newlyCreated = new NewNode(data);
创建新节点时,它只是在本地创建一个新节点。当前实例(即this
)保持不变。
如果您执行this.data = data
,即更改当前实例的data
字段,您的输出将会更改
编辑: 另外,您还需要覆盖toString方法以打印NewNode
,否则它将打印默认Object
的{{1 }}方法
答案 2 :(得分:2)
好的,看一下这段代码。让我尝试给你一个简单的例子。
假设我们有一个这样的类:
class A {
int data;
void printData() {
System.out.println(this.data);
}
}
然后您创建两个这样的A实例:
A a1 = new A(); a1.data = 10;
A a2 = new A(); a2.data = 12;
因此,现在有两个a1
类型的对象a2
和A
。
现在让我们在它们上调用printData()
方法。你会怎么做?
a1.printData();
a2.printData();
现在看第一个打印调用,它发生在a1
对象上。因此,现在控制权进入printData
方法,其中this
将解析为a1
,因此this.data
从外部将与a1.data
相同。
现在在第二个通话中,是的,您说对了。它是在a2
对象上调用的,因此在方法printData
中,a2
将分配给this
。
这就是当他们说 this
解析为当前对象时的意思。
现在知道了吗?