Что означает это ключевое слово в коде?

Вот мой следующий код:

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() и печати его на консоли

Другие вопросы по тегам