¿Se reflejará este cambio en ArrayList?
Sí, ya que agregó una referencia al objeto en la lista. La referencia que agregó seguirá apuntando al mismo objeto (que modificó).
o cuando agrego el objeto a ArrayList, Java crea una copia y la agrego a ArrayList?
No, no copiará el objeto. (Copiará la referencia al objeto).
¿Qué pasa si cambio la referencia a este objeto a nulo? ¿Eso significa que el objeto en ArrayList ahora también es nulo?
No, ya que el contenido de la referencia original se copió cuando se agregó a la lista. (Tenga en cuenta que lo que se copia es la referencia , no el objeto).
Demostración:
StringBuffer sb = new StringBuffer("foo");
List<StringBuffer> list = new ArrayList<StringBuffer>();
list.add(sb);
System.out.println(list);
sb.append("bar");
System.out.println(list);
sb = null;
System.out.println(list);