Article View: pl.comp.lang.java
Article #154222Re: Tablica int a tablica Integerów
From: Pit
Date: Thu, 16 Jul 2015 16:29
Date: Thu, 16 Jul 2015 16:29
40 lines
2600 bytes
2600 bytes
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.
Technical Details
Message-ID:
<slrnmqfmvj.24t.nospam@nc10.lan>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<mo7np0$gd4$1@node2.news.atman.pl> <mo7p89$3dp$1@node1.news.atman.pl> <gvy0ekcd9fz8$.8kuun2k7a2e4$.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!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> 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 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) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit