Szia! Ön már jól ismeri a primitív típusokat, és elég sokat dolgozott velük. A programozásban (és különösen a Java-ban) a primitíveknek számos előnyük van: kevés memóriát használnak (és ezáltal hatékonyabbá teszik a programot), és világosan körülhatárolható értéktartományuk van. A Java tanulása közben azonban már gyakran ismételtük a „Java-ban minden egy objektum” mantrát. De a primitívek egyenesen ellentmondanak ezeknek a szavaknak. Nem tárgyak. Tehát hamis a "minden tárgy" elvünk? Valójában nem. A Java nyelven minden primitív típusnak van egy ikertestvére, egy wrapper osztály.
Mi az a wrapper osztály?
A wrapper egy speciális osztály, amely belül tárol egy primitívet. De mivel ez egy osztály, létrehozhat belőle példányokat. Belsőleg tárolják a primitív értékeket, de még mindig valódi objektumok. A wrapper osztályok nevei nagyon hasonlítanak (vagy pontosan megegyeznek) a hozzájuk tartozó primitívek nevével. Tehát könnyű megjegyezni őket.
Burkolati osztályok primitív adattípusokhoz |
Primitív adattípusok |
Csomagoló osztályok |
int |
Egész szám |
rövid |
Rövid |
hosszú |
Hosszú |
byte |
Byte |
úszó |
Úszó |
kettős |
Kettős |
char |
karakter |
logikai érték |
Boolean |
A burkoló objektumok ugyanúgy jönnek létre, mint bármely más objektum:
public static void main(String[] args) {
Integer i = new Integer(682);
Double d = new Double(2.33);
Boolean b = new Boolean(false);
}
A wrapper osztályok segítségével enyhíthetjük a primitív típusok hiányosságait. A legnyilvánvalóbb az, hogy a primitíveknek nincsenek módszereik.
Például nincs bennük
toString() metódus, így például egy int nem konvertálható Stringgé . De az
Integer wrapper osztály ezt megkönnyíti.
public static void main(String[] args) {
Integer i = new Integer(432);
String s = i.toString();
}
A másik irányú átalakítás azonban bonyolultabb lehet. Tegyük fel, hogy van egy
karakterláncunk , amelyről biztosan tudjuk, hogy számot tartalmaz. Ettől függetlenül nincs natív módja annak, hogy egy primitív
int segítségével kinyerjük a számot a
karakterláncból , és számmá alakítsuk. De a wrapper osztályokkal megtehetjük.
public static void main(String[] args) {
String s = "1166628";
Integer i = Integer.parseInt(s);
System.out.println(i);
}
Kimenet:
1166628
Sikeresen kinyertünk egy számot a Stringből
, és hozzárendeltük az
i Integer referenciaváltozóhoz . Egyébként a referenciákkal kapcsolatban. Már tudja, hogy az argumentumokat különböző módokon adják át a metódusoknak: primitívek érték szerint, objektumok pedig hivatkozással. Ezt a tudást felhasználhatja saját metódusainak létrehozásakor: például ha a metódus törtszámokat használ, de logikára van szüksége a hivatkozással történő átadáshoz, akkor a double /
float helyett
Double / Float argumentumokat
adhat át
a metódusnak . A burkoló osztályok metódusai mellett a statikus mezőik is nagyon kényelmesek lehetnek. Képzelje el például, hogy a következő feladata van: jelenítse meg a lehetséges maximumot
int értéket, majd a lehető legkisebb értéket. Ez a probléma meglehetősen alapvetőnek tűnik. De a Google nélkül nem valószínű, hogy meg tudná csinálni. De a wrapperek lehetővé teszik az ilyen "hétköznapi feladatok" egyszerű kezelését:
public class Main {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
Ezek a területek megakadályozzák, hogy elterelje a figyelmét a komolyabb feladatok elvégzésétől.
Arról nem is beszélve, hogy a 2147483647 beírása (amely történetesen MAX_VALUE értéke) nem kis teljesítmény! :) Sőt, egy előző leckében rámutattunk, hogy a wrapper objektumok megváltoztathatatlanok.
public static void main(String[] args) {
Integer a = new Integer(0);
Integer b = new Integer(0);
b = a;
a = 1;
System.out.println(b);
}
Kimenet:
0
Az eredetileg a által mutatott objektum állapota nem változott (mert
b értéke is megváltozott volna).
Az s karakterlánchoz hasonlóan a burkoló objektum állapotának megváltoztatása helyett egy teljesen új objektum jön létre a memóriában. Tehát miért döntöttek úgy a Java alkotói, hogy a primitív típusokat hagyják a nyelvben? Mivel mindennek objektumnak kell lennie, és vannak burkoló osztályaink, amelyek mindent kifejezhetnek, amit a primitívek kifejeznek, miért nem csak a burkolókat tartjuk a nyelvben, és eltávolítjuk a primitíveket? A válasz egyszerű: teljesítmény. A primitív típusokat primitívnek nevezzük, mert hiányzik belőlük az objektumok sok „nehézsúlyú” jellemzője. Igen, az objektumok számos kényelmes módszerrel rendelkeznek, de nincs mindig szükség rájuk.
Néha csak a 33-as vagy a 2,62-es vagy az igaz /
hamis számra van szüksége . Olyan helyzetekben, amikor az objektumok előnyei nem számítanak, és nem szükségesek a program működéséhez, a primitívek sokkal jobban megfelelnek a feladatnak.
GO TO FULL VERSION