Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.java > #10752
| From | Pit <nospam@sdf.lonestar.org> |
|---|---|
| Newsgroups | pl.comp.lang.java |
| Subject | Re: Tablica int a tablica Integerów |
| Date | 2015-07-16 16:29 +0000 |
| Organization | ATMAN - ATM S.A. |
| Message-ID | <slrnmqfmvj.24t.nospam@nc10.lan> (permalink) |
| References | <mo7np0$gd4$1@node2.news.atman.pl> <mo7p89$3dp$1@node1.news.atman.pl> <gvy0ekcd9fz8$.8kuun2k7a2e4$.dlg@40tude.net> |
Dnia 16.07.2015 szemrany <szemrany@offline.off> napisał/a:
> Otóż ktoś kiedyś mi opowiadał o tych typach prostych będących de facto
> obiektami i jest to tak, że jeśli Integer ma wartość innego integera
> istniejącego już w runtimie to oba są referencjami na ten sam obiekt.
Nie do końca tak jest. Dla przykładu dla typu Integer: tam gdzie kompilator
spodziewa się int lub Integer , to niejawnie jest wywoływana metoda
intValue() która zwraca KOPIĘ wartości Integera (jako typ prosty) a nie
referencję do "oryginału", przez co kod postaci:
public class Klasa {
public static void increment (Integer x) { ++x; }
public static void main(String a[]) {
Integer obiekt = new Integer(1);
increment(obiekt);
System.out.println(obiekt);
}
}
zwróci wynik '1' (taki sam jakby w deklaracji było increnemt(int x)). Tak
się zachowują wszystkie wbudowane typu pochodne od Number, mają metody
intValue(), longValue(), doubleValue() itd. (wywoływane w zależności od
kontekstu na jakich wartościach jest wykonywana operacja), które zwracają
kopię wartości a nie referencję. Podobnie zresztą zachowa się kod:
public class Klasa {
public static void main(String arg[]) {
Integer a = new Integer(1);
Integer b = a;
a++;
System.out.print(a+" ");
System.out.println(b);
}
}
który zwróci wynik '2 1'. Momo że a i b są obiektami, to b=a przypisze do b
KOPIĘ wartości a (zwróconą przez metodę a.intValue()). Po prostu kompilator
wszędzie niejawnie wywołuje metody typu intValue(), floatValue(),
toString() itp. W ten sposób zapewnione jest, że obiekty Integer, Double
itd. zachowują się w praktyce tak samo jak typy proste.
Back to pl.comp.lang.java | Previous | Next — Previous in thread | Find similar
Re: Tablica int a tablica Integerów szemrany <szemrany@offline.off> - 2015-07-16 17:25 +0200 Re: Tablica int a tablica Integerów Pit <nospam@sdf.lonestar.org> - 2015-07-16 16:29 +0000
csiph-web