Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.java > #10752
| Path | csiph.com!aioe.org!goblin2!goblin.stu.neva.ru!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail |
|---|---|
| From | Pit <nospam@sdf.lonestar.org> |
| Newsgroups | pl.comp.lang.java |
| Subject | Re: Tablica int a tablica Integerów |
| Date | Thu, 16 Jul 2015 16:29:39 +0000 (UTC) |
| Organization | ATMAN - ATM S.A. |
| Lines | 40 |
| 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> |
| NNTP-Posting-Host | user-164-127-88-124.play-internet.pl |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=UTF-8 |
| Content-Transfer-Encoding | 8bit |
| X-Trace | node1.news.atman.pl 1437064179 1111 164.127.88.124 (16 Jul 2015 16:29:39 GMT) |
| X-Complaints-To | usenet@atman.pl |
| NNTP-Posting-Date | Thu, 16 Jul 2015 16:29:39 +0000 (UTC) |
| User-Agent | slrn/1.0.1 (Linux) |
| Xref | aioe.org pl.comp.lang.java:10752 |
Show key headers only | View raw
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