List.add() attend un paramètre de type java.lang.Object en paramètre, donc tu peux ajouter n'importe quel objet de ce type. Et comme ce type est le type de base de tous les objets en Java, tu peux ajouter à une liste n'importe quoi qui n'est pas un atomique.
Maintenant, reste à savoir si ce que tu mets en paramètre de l'appel à la fonction est cohérent. ("une chaine qqconque" + une image genre icone, ça signifie quoi ? Soit ton une image genre icone est en fait de type java.lang.String (exemple, le chemin d'une image), auquel cas il existe bien un opérateur + de concaténation de 2 chaines de caractères, et le résultat de cette concaténation sera alors ajouté à ta liste, soit c'est d'un autre type (par exemple javax.swing.Icon), et cette expression n'a aucun sens.
Le compilateur Java essaiera de faire ce qu'il peut avec cette expression dénuée de sens et, sans doute, essaiera de convertir ton objet d'un autre type en une chaîne de caractères (typiquement en appelant toString), ce qui lui permettra ensuite d'appliquer la concaténation correctement.