Jeste dodam, ze o všech věcech v paměti, které nejsou dynamicky alokované (+-není u nich new), tedy například: int a; Trida a; // JEN ODKAZ, ne instance struct Bod a; compiler opravdu předem ví, tudíž vygeneruje takový byte code, který při vytváření rámce funkce / případně instance objectu počítá s tím, že musí na stacku (lokální proměnné) / heapu(instance) nechat místo. Takže "že instance, např Int32, je treba jiz davno vytvorena, respektive, že kompilátor, dopředu počítá s tím, " je správná myšlenka.. Ví co tam bude, takže na to nechává míst. Jen poupravím, že u primitivních typů neříkáme instance (instance je 1kus nějaké třídy, atp.) u primitivních typů je to prostě 1 "int". Ještě dodám jednu mírně advanced věc. V .NETu jsou primitivní typy jako int, float, char atp., jelikož ale autoři chtěli umožnit, aby jste mohl používat tyto primitivní typy i například u kolekcí (List<>), které jsou schopny "pojmout" jen něco co dědí od Object - musí být i tyto primitivní typy tzv. "zapouzdřeny" v nějakém objectu.. tomudle se říká "boxing primitivních typů" a proto jsou tam třídy jako Integer, Float atp.. pokud tedy chcete mít List<int>, tak se při vložení intu do této kolekce "natajnačku" dělá nová instance typu Integer temp = new Integer(a); a pak se přidá do toho listu. Tomuto se dá pak předejít, ale to už je na jinou debatu :-)
|