¡Hola Jonathanl! Espero que estés bien!
Lo que pasa es que en el ArrayList no se guarda el objeto sino la referencia a ese objeto, por lo tanto, el metodo contains busca o compara en el ArrayList es por la referencia de ese objeto y no por lo que contiene el objeto en si mismo, es decir, la tercera cuenta es creada con una referencia direferente más su contenido es igual a la primera cuenta; por esta razon el metodo contains te retorna false porque sus referencias son diferentes aunque su contenido es el mismo.
Aqui te dejo una ilustración:
¡Te deseo mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte!
Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!