Il metodo equals() richiamato è quello della classe A, ovviamente, non quello della classe String. Se non è sovrascritto, il metodo è ereditato da Object, e restituisce true se e solo se i due riferimenti puntano allo stesso oggetto, cioè:
Se invece vuoi confrontare le rappresentazioni dei due oggetti come stringhe devi fare:codice:a.equals(b) <==> a==b
Ciao,codice:( a.toString() ).equals( b.toString() )