以下是我的以下代码:
public class SharedState {
private static final List<SharedState> list = new ArrayList<>();
public SharedState() {
list.add(this); // What does "this" mean here?
System.out.println(list);
}
public static void main(String[] args) {
Thread t1 = new Thread("t1") {
@Override
public void run() {
/* try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
} */
new SharedState();
}
};
Thread t2 = new Thread("t2") {
@Override
public void run() {
new SharedState();
}
};
t1.start();
t2.start();
}
@Override
public String toString() {
return "SharedSate";
}
}
this
指的是当前对象,此处list.add(this)
正在将SharedSate
添加到列表中,对吧?这意味着它正在调用toString()
,然后它在控制台上打印出list
。我是对的吗?我只是想知道这两行是如何工作的:
list.add(this);
System.out.println(list);
答案 0 :(得分:0)
你是对的this
引用当前对象,在这种情况下它意味着 -
SharedState sharedState = new SharedState();
list.add(this)
表示sharedState对象,即调用此构造函数的对象。
答案 1 :(得分:0)
这指的是当前对象,因此调用SharedState()的每个对象都被添加到列表中。您可以在创建对象时检查,如下所示
SharedState obj=new SharedState();
obj 对象已添加到列表
System.out.println(list);
上面的行类似于调用list.toString()并在控制台上打印
答案 2 :(得分:0)
这里list.add(this)正在将SharedSate添加到列表中,对吧?所以这意味着它正在调用toString()
你的陈述的第二部分是错误的。你从哪里得到的? add
方法永远不会调用toString()
。
我只是想知道这两行是如何工作的:
list.add(本);
的System.out.println(列表);
list.add(this)将当前对象添加到列表中。
并且,在打印对象时,将调用toString()
方法。如果类没有定义toString方法,那么每个对象都将从Object
超级类中获取它。