Avtoupakovka és kicsomagolás a java
Avtoupakovka és kicsomagolás a Java.
Ebben a cikkben fogjuk vizsgálni egy ilyen funkció a Java mint avtoupakovka / kicsomagolás.
Avtoupakovka és kicsomagolás függvénye konverziós primitív típusok a tárgy és fordítva.
Az egész folyamat automatikus Java Runtime Environment (JRE). De óvatosan kell bánni ezzel a funkcióval, mivel Ez befolyásolja a teljesítményét a program.
A verziók alacsonyabb JDK 1.5 nem volt könnyű átalakítani primitív adattípusok, mint például a
int, char, float, double az osztályokat Egész shell, Character, Float, Double. Kezdve JDK 5-ös verzió ezt a funkciót, átalakítása primitívek, hogy egyenértékű tárgyakat valósul automatikusan.
Ez a tulajdonság az úgynevezett Avtoupakovka (Autoboxing). A fordított folyamat, illetve - kicsomagolása (Unboxing) azaz A folyamat átalakításának tárgyak be a megfelelő primitív típusok.
Mintakódja avtoupakovki és dekompressziós az alábbiakban mutatjuk be:
Ha használt avtoupakovka és kicsomagolás?
Avtoupakovka Java fordító használjuk fel a következő feltételeket:
Amikor egy primitív típusú értéket vezetünk az eljárás, mint a beállítási mód, amely elvárja, hogy a tárgy megfelelő wrapper osztályt.
Amikor egy ősi típus rendelt érték a változó megfelelő wrapper osztályt.
Tekintsük a következő példát:
Az 1. lista: egy egyszerű kódot mutatja avtoupakovku
Előzetes változatai JDK 1.5 fenti kód okozna egy összeállítás hibát, mivel a fennmaradó üzemeltető% és egyváltozós plusz + = nem alkalmazható a wrapper osztályt.
De JDK 1.5 és újabb, a kód lefordul hiba nélkül alakítjuk Egész int.
Kicsomagolása Java fordító használjuk a következő feltételeknek:
Ha egy objektum telt el, mint a paraméter a módszer, amely elvárja a megfelelő ősi típus.
Ha az objektum rendelve a mindenkori ősi típus.
Tekintsük a következő példát:
2. listában: egy egyszerű kódot mutatja kicsomagolás
Avtoupakovka és unboxing lehetővé teszi a fejlesztő kódot írni, ami könnyen olvasható és érthető. Az alábbi táblázat mutatja a primitív adattípusok és a megfelelő shell tárgyakat.
1. táblázat: primitív típusok és az azzal egyenértékű wrapper osztályok
Tól összehasonlító operátorok
Avtoupakovka és a dekompressziós használható összehasonlító operátorok. A következő kódrészlet szemlélteti, hogyan működik ez:
A 3. lista: mintakódja mutatja avtoupakovku és kicsomagolás összehasonlító operátor
Avtoupakovka és kicsomagolás, ha a módszert túlterhelt
Avtoupakovka és a dekompressziós végezzük túlterhelése szerinti eljárás az alábbi szabályokat:
- bővítése „győzelem” csomagolás - olyan helyzetben, amikor nem válik közötti választás bővítése és a csomagolás kiterjesztése előnyös.
A 4. lista: kód például előnyeinek bemutatására túlterhelés
Az a program lezárása - int
- Expansion nyerési változó számú érvek - Olyan helyzetben, amikor ez lesz a választás között kiterjesztése és változó számú érv, kiterjesztése előnyös.
5. lista: mintakódja előnyeinek bemutatására túlterhelés
- Csomagolás nyer egy változó számos érv - Egy olyan helyzetben, ahol ez lesz a választás a csomagot, és változó számú érv, a csomagolás előnyös.
Lista 6: kód például előnyeinek bemutatására túlterhelés
Meg kell emlékezni a következő dolgok használata Avtoupakovku:
Mint tudjuk, minden jó tulajdonsága van hiba. Avtoupakovka sem kivétel ebben a tekintetben. Néhány fontos megjegyzés, hogy a fejlesztő kell vennie, amikor ezt a funkciót használja:
- Összehasonlítva tárgyak Operator „==” zavarhoz vezethet, mivel lehet alkalmazni, hogy a primitív típusok és tárgyakat. Ha ezt a szolgáltató olyan tárgyakra, valójában le a tárgy adatai helyett a tárgyak maguk.
7. lista: Példa kód mutatja az összehasonlítást.
- keverés tárgyak és primitív típusok közötti egyenlőség és a relációs operátorok. Ha összehasonlítjuk a primitív típusú objektum, akkor van kicsomagolás objektum, amely lehet dobni NullPointerException ha null objektumot.
- Object gyorsítótár. valueOf () metódus létrehoz egy konténer primitív tárgyakat, hogy cache. Mivel az értékek cache tartományban -128-tól 127-ig bezárólag, ezek cache tárgyak másként viselkednek.
- A romló teljesítményét. Avtoupakovka kicsomagolás lebontó alkalmazások teljesítményét, mert létrehoz egy nem kívánt tárgy, ami miatt a szemétgyűjtő gyakrabban dolgoznak.
Hátrányok Avtoupakovki.
Bár Avtoupakovka számos előnnyel jár, a következő hátrányai:
Listing 8: mintakódja mutatja a teljesítmény probléma.
Ez része a kódot, összege + = i fogják terjeszteni a sum = sum + i. Mivel a „+” operátora JVM kezdődik dekompressziós, hiszen a „+” operátora nem lehet alkalmazni a Integer objektum. És akkor az eredmény avtoupakovyvaetsya vissza.
Korábbi verzióit JDK 1.5 adattípusok int és egész más. Túlterhelés esetén a módszer, ez a két típus esetében probléma nélkül használható. Az Advent a automata csomagológép / kicsomagolás, akkor nehezebbé vált.
Egy példa erre túlterhelt remove () módszer ArrayList. ArrayList osztály két eltávolítási módszerek - eltávolítás (index), és távolítsa el (objektum). Ebben az esetben, az eljárás túlterhelés nem fordul elő, és egy megfelelő eljárás lesz az úgynevezett a megfelelő paramétereket.
Következtetés.
Avtoupakovka olyan mechanizmus átalakítására látens primitív adattípusok a megfelelő csomagoló osztályok (objektumok). A fordító használja valueOf () átalakítani primitív típusokat a tárgyak és módszerek intValue () módszer, a doubleValue (), stb hogy a primitív objektum típusok. Avtoupakovka alakítja logikai logikai a logikai, byte Byte, char karakterkorlátozásai, lebegnek egy Float, int az Integer, hosszú hosszú, rövid Short. Kicsomagolás fordul elő az ellenkező irányba.
Az eredeti cikk