( Hevi | 2021. 04. 09., p – 02:50 )

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.