Zalozmy, ze mam obiekt Number vv z jakas wartoscia.
w przypadku if'a i equalsa moge zrobic:
vv.intValue == 5 (to bedzie ok)
ale co sie stanie gdy zrobie:
vv.equals(5)
jak tu zadziala odpakowanie ?
Zalozmy, ze mam obiekt Number vv z jakas wartoscia.
w przypadku if'a i equalsa moge zrobic:
vv.intValue == 5 (to bedzie ok)
ale co sie stanie gdy zrobie:
vv.equals(5)
jak tu zadziala odpakowanie ?
Nie zadziala odpakowanie, zadziala pakowanie - 5 zostanie spakowane do Integera, ktory jest Numberem. To czy bedzie true czy false zalezy od tego jaki konkretny typ bedzie miec vv, ale mozesz sama sprawdzic.
wlasnie sprawdzam, przerobilam juz na pierwsza wersje dziala ok.
Wczesniej druga mialam w kodzie i po zbudowanie apki na tomcacie dzialalo zle, a sama syso w kodzie zwracalo ok - confused :P
vv ma typ Numeric (nie konkretny jak Integer itp)
magda88 napisał(a):
vv ma typ Numeric (nie konkretny jak Integer itp)
Zakladam ze chodzilo o Number nie o Numeric. I jesli tak, to bardzo sie mylisz, Number to klasa abstrakcyjna i nie moze byc zadnej instancji klasy Number, tylko podklas.
racja, Number, rzeczywiscie abstrakcyjna.
Teraz nie rozumiem, taki kod:
Number vv= (Number) 5;
vv.equals(5) - dziala czasem zle. Juz to usunalem, ale zastanaiwam sie czemu tak to sie zle zachowuje ?
a
vv.intValue() == 5 - dziala zawsze ok
magda88 napisał(a):
racja, Number, rzeczywiscie abstrakcyjna.
Teraz nie rozumiem, taki kod:
Number vv= (Number) 5;
vv.equals(5) - dziala czasem zle. Juz to usunalem, ale zastanaiwam sie czemu tak to sie zle zachowuje ?
a
vv.intValue() == 5 - dziala zawsze ok
Number vv = 5 - wystarczajaco dobre, to tworzy Integera, a ten jest podklasa Number wiec nie musisz rzutowac.
Poza tym cos krecisz, oto implementacja Integer.equals:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Czyli inValue jest rowniez uzyte. Moim zdaniem nie do konca panujesz nad tym co trzyba zmienna vv: raz Integer, raz moze Long a raz cos innego.