Что означает это ключевое слово в коде?
Вот мой следующий код:
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);
3 ответа
здесь list.add(это) добавляет SharedSate в список, верно? Так что это означает, что он вызывает toString ()
2-я часть вашего утверждения неверна. Откуда ты это взял? add
метод никогда не вызывает toString()
,
Я просто хотел знать, как работают эти две строки:
list.add(это);
System.out.println (список);
list.add(this) добавит текущий объект в список.
и при печати объекта toString()
метод вызывается. Если в классе не определен метод toString, каждый объект получит его от Object
супер самый класс.
Вы правы в том, что this
ссылается на текущий объект, и здесь, в данном случае, это означает -
SharedState sharedState = new SharedState();
а также list.add(this)
означает объект sharedState, т.е. объект, для которого был вызван этот конструктор.
Это относится к текущему объекту, поэтому каждый объект, вызывающий SharedState(), добавляется в список. Вы можете проверить это при создании объекта, как показано ниже
SharedState obj=new SharedState();
объект obj добавлен в список
System.out.println(list);
строка выше аналогична вызову list.toString() и печати его на консоли