Avagy nekem az a különbség, hogy a konstruktoroknál minden paraméter "final". Lehet, hogy ez a gond?
A final nem szabad, hogy gond legyen. Csak annyit jelent, hogy egyszer lehet (és kell?) neki értéket adni. Azon kívül úgy viselkedik, mint egy normál "változó" (final Javaban == példány konstans; static final == típus konstans)
Szerk: ne téveszd el az ==-t és a .equals()-t. Előbbi a referenciát hasonlítja, azaz ugyanaz az objektum-e, míg az utóbbi az objektum tulajdonságait, amit egy @Override equals()... felüldefiniálással tudsz testre szabni.
Lehet ezt amúgyis tudtad, de gondoltam megemlítem :) Tipikus hiba lehetőség, mikor az ember Java-t tanul.
Fun fact: _ha_ _konstans_ stringet hasonlítasz változóhoz, ird így:
"az én stringem".equals(az_en_valtozom);
Ez azért jó, mert a konstans string .equals()-ja null-safe, szóval nem kapsz NPE-t, csak false-t, ha az_en_valtozom null. Ha fordítva írod és az_en_valtozom null, akkor NPE és gyász van.
Avagy, ha az_en_valtozom null, akkor
String az_en_valtozom = null;
"az én stringem".equals(az_en_valtozom); // false
az_en_valtozom.equals("az én stringem"); // NPE
Mert egy "null object"-nek, azaz egy sehova se mutató referenciának nincsenek függvényei, mert ugye nem mutat semmilyen objektumra.