🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #154222

Re: Tablica int a tablica Integerów

#154222
From: Pit
Date: Thu, 16 Jul 2015 16:29
40 lines
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-mail
References: <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