Почему мой ArrayList содержит N копий последнего элемента, добавленного в список?

Я добавляю три разных объекта в ArrayList, но список содержит три копии последнего добавленного мной объекта.

Например:

for (Foo f : list) {
  System.out.println(f.getValue());
}    

Ожидаемое:

0
1
2

Актуально:

2
2
2

Какую ошибку я сделал?

Примечание: это разработано, чтобы быть каноническим Q &А за многочисленные подобные проблемы, которые возникают на этом сайте.

Ответы на вопрос(4)

Ваш ответ на вопрос